PDA

View Full Version : مبتدی: در آوردن ایمیل توسط linq و ارسال ایمیل گروهی(تکمیل شد)



mthreat.info
یک شنبه 29 اردیبهشت 1392, 16:16 عصر
سلام بنده 2 تا جدول دارم که یکی ID کاربر رو داره یکی هم Email کاربر
حالا من میخوام به همه ی کاربران موجود ایمیل بزنم
اما مشکل من :

در آوردن Email همه ی کاربرا (Linq)
فرستادن ایمیل گروهی

csharpdoost
یک شنبه 29 اردیبهشت 1392, 16:36 عصر
نمیدونم بر چه اساسی این دو جدول رو درست کردی ولی میتونی یه جدول درست کنی با دوتا ستون . که یکیش ID و دیگری Email کاربران باشه و هر کدومش هم میتونی کلید اصلی بذاری. در هر صورت باید یه دیتاتیبل درست کنی و جدولت رو توی اون بریزی و بعد هم یه حلقه بنویسی که تا زمانی که تعداد ردیفهای دیتاتیبل صفر نشده یکی یکی ردیفها رو بخونی . اگه نتونستی کد بذار که دوستان راحت تر راهنمایی کنن.

mthreat.info
یک شنبه 29 اردیبهشت 1392, 16:43 عصر
تو جدول 1 که یه نوع log حساب میشه ID کاربر ذخیره میشه بعد من میخوام بر اساس اون ایمیل کاربرا رو پیدا کنم بعد بهشون ایمیل بزنم
مشکل من اینه که نمیتونم کل ایمیل ها رو در بیارم و به همه یهو ایمیل بزنم

mthreat.info
یک شنبه 29 اردیبهشت 1392, 17:16 عصر
پیشاپیش از کمک هاتون ممنونم :D

mthreat.info
یک شنبه 29 اردیبهشت 1392, 17:44 عصر
من چطوری این کار را رو بکنم؟

morteza271
یک شنبه 29 اردیبهشت 1392, 18:02 عصر
یعنی شما الان نمیتونید لیست تمام ایمیل ها رو بگیرین؟؟
مثلا فرض کنید اسم جدول شما باشه Users بعد به این صورت میتونید لیست ایمیل ها رو بگیرین از این جدول :
List<Users> lstUser = DB.Users.ToList();
البته این در صورتی هست که شما از Entity استفاده می کنید.
اگه بدردتون نخورد ک خودتون رو بذارین تا کمکتون کنیم...

mthreat.info
یک شنبه 29 اردیبهشت 1392, 18:20 عصر
یعنی شما الان نمیتونید لیست تمام ایمیل ها رو بگیرین؟؟
مثلا فرض کنید اسم جدول شما باشه Users بعد به این صورت میتونید لیست ایمیل ها رو بگیرین از این جدول :
List<Users> lstUser = DB.Users.ToList();
البته این در صورتی هست که شما از Entity استفاده می کنید.
اگه بدردتون نخورد ک خودتون رو بذارین تا کمکتون کنیم...

من این کد رو نوشتم ولی این برای یک نفر کار میکنه نه همه ی کاربرا



var query1 = from allField in dblq.mytables where allField.giveDate == rr select allField.memberCode;

var query2 = from allfild2 in dblq.Users where allfild2.memberCode == query1.First() select allfild2.email;

mthreat.info
یک شنبه 29 اردیبهشت 1392, 19:04 عصر
حالت من :گیج:

morteza271
یک شنبه 29 اردیبهشت 1392, 19:52 عصر
فکر میکنم اگه از JOJN استفاده کنید مشکلتون حل میشه.
متاسفانه من زیاد با LINQ کار نکردم و نمیتونم کمک زیادی بهتون بکنم.
فقط اگه در مورد JOIN جستجو کنید و Syntax اونو پیدا کنید میتونید مشکلتون رو رفع کنید.
موفق باشید

nima.sh
یک شنبه 29 اردیبهشت 1392, 21:13 عصر
سلام محمد جان....
اگه میخوای به همه ایمیل بزنی با این دستور:

var query1 = from allField in dblq.mytables select allfield.mail

این دستور تمام ایمیل ها رو واست میاره،بعد تو یه foreach بذار متد یا کلاس ارسال ایمیل رو فراخونی کن....
دقیق متوجه نمیشم،چی کار میخوای بکنی....؟
یه خورده بیشتر توضیح بده....
موفق باشی...

mthreat.info
یک شنبه 29 اردیبهشت 1392, 21:40 عصر
سلام محمد جان....
اگه میخوای به همه ایمیل بزنی با این دستور:

var query1 = from allField in dblq.mytables select allfield.mail

این دستور تمام ایمیل ها رو واست میاره،بعد تو یه foreach بذار متد یا کلاس ارسال ایمیل رو فراخونی کن....
دقیق متوجه نمیشم،چی کار میخوای بکنی....؟
یه خورده بیشتر توضیح بده....
موفق باشی...

سلام نیما جان :D ، آقا من میخوام بر اساسID که دارم <query1> بگیرم ایمیل کاربرامو بدست بیارم <query2>
تو تیکه کدی اون بالا گذاشتم فقط ID یه کاربر رو بدست میارم و ایمیل همون کاربر ولی من میخوام همه کاربرایی که شرطی که گذاشتم برقرار بود برگندونده بشه
شرط:
تاریخ آخرین تغییرات +مقدار روزی که میدم == تاریخ امروز

دیگه نمیدونم چطوری توضیح بدم :لبخند:

uniqueboy_ara
یک شنبه 29 اردیبهشت 1392, 22:53 عصر
var X = Context.Table1.join(Context.Table2,P=>P.UserID,E=>E.UserID,(P,E)=>new{
P.UserID,
E.Email
}
);

mthreat.info
دوشنبه 30 اردیبهشت 1392, 00:50 صبح
var X = Context.Table1.join(Context.Table2,P=>P.UserID,E=>E.UserID,(P,E)=>new{
P.UserID,
E.Email
}
);
من از کد شما استفاده کردم ولی با خطا ی زیر مواجه شدم :گیج:

http://img.ir/xsJ.jpg

nima.sh
دوشنبه 30 اردیبهشت 1392, 05:35 صبح
سلام مهندس....
این کد رو تست کردم،جواب داد:

var query = from c in cus.personels join o in cus.shifts on c.id_personel equals o.id_personel select new { };

فقط اون فیلد هایی رو که میخوای رو مشخص کن،دقت داشته باش که دوتا جدول ارتباط داشته باشن(relation)....
موفق باشی...

mthreat.info
دوشنبه 30 اردیبهشت 1392, 14:29 عصر
من حالا برای برسی اینکه بتونم ببینم کاربر داده شده همونی هست که من میخوام باید از چه دستوری استفاده کنم؟
کد قبلی من :


var query1 = from allField in dblq.mytables where allField.giveDate == rr select allField.memberCode;


rr تاریخی که من دادم!
الان من موندم چی کار کنم :D
دستوری که به من دادید کسایی که ID اونا برابرند رو برمیگردونه! ولی من میخوام که شرطم رو هم در بر بگیره
(راستی بانکی که ازش دارم استفاده میکنم دارای ارتباط هست)

پیشاپیش ممنونم

mthreat.info
دوشنبه 30 اردیبهشت 1392, 20:16 عصر
کدش رو نوشتم :بامزه: (البته با کمک شما )



var query1 = from c in dblq.mytables where c.giveDate == rr join o in dblq.Users on c.memberCode equals o.memberCode select new {o.email,o.pic};



الان من یه مشکلی دارم اونم اینه که من با MemoryStream یک عکس رو به بانکم ذخیره میکنم اما الان برای خوندش نمیدونم باید چیکار کنم :متفکر:
میشه یه کمکی کنید :خجالت:

nima.sh
دوشنبه 30 اردیبهشت 1392, 20:21 عصر
کدش رو نوشتم :بامزه: (البته با کمک شما )



var query1 = from c in dblq.mytables where c.giveDate == rr join o in dblq.Users on c.memberCode equals o.memberCode select new {o.email,o.pic};



الان من یه مشکلی دارم اونم اینه که من با MemoryStream یک عکس رو به بانکم ذخیره میکنم اما الان برای خوندش نمیدونم باید چیکار کنم :متفکر:
میشه یه کمکی کنید :خجالت:
این یکی رو تا به حال کار نکردم،با همین روش تست کردی....؟
ببین جواب میده یا نه...!!!
موفق باشی...

nima.sh
دوشنبه 30 اردیبهشت 1392, 20:25 عصر
تو تاپیک بالا منظورم با linq بود،اگه با ADO.NET بخوای کدش رو واست میذارم....
موفق باشی...

mthreat.info
سه شنبه 31 اردیبهشت 1392, 01:00 صبح
تست کردم نشد خطای syntax میگیره ازم :خجالت: نه برام مهمه که linq باشه چون دارم linq یاد میگیرم هم دارم روی یه پروژه کار میکنم (که هم فاله هم تماشا :بامزه: )

mthreat.info
سه شنبه 31 اردیبهشت 1392, 01:52 صبح
این یکی هم پیدا کردم :بامزه:



var images = from p in query1 select Image.FromStream(new MemoryStream(p.pic.ToArray()));


حالا بریم سراغ سوالی که جواب نگرفتم :خجالت: حالا چطوری ایمیل بزنم (مشکل من فرستادن عکسی که با همین کد بدست آوردم ، فرستادن ایمیل بصورت گروهی)

mthreat.info
سه شنبه 31 اردیبهشت 1392, 03:46 صبح
بلاخره فهمیدم چطوری این کار رو بکنم :کف:
این کلاسی هست که برای ارسال ایمیل استفاده میکردم


public string SendAlarmMail(string Use_User, string Use_Name, string TO_Address, string Mail_Subject, string Mail_Body, string Address_File, string Use_Pass, int Mail_Port, bool SSl_On__Off, string Use_Host)
{
try
{
var S_N_M = new System.Net.Mail.SmtpClient();
var M_M = new MailMessage();
M_M.From = new MailAddress(Use_User, Use_Name);
M_M.To.Add(TO_Address);
M_M.Subject = Mail_Subject;
M_M.Body = Mail_Body;
M_M.BodyEncoding = Encoding.UTF8;
M_M.Attachments.Add(new Attachment(Address_File));
M_M.IsBodyHtml = false;
var mdMc = new NetworkCredential(Use_User, Use_Pass);
S_N_M.UseDefaultCredentials = false;
S_N_M.Credentials = mdMc;
S_N_M.DeliveryMethod = SmtpDeliveryMethod.Network;
S_N_M.Port = Mail_Port;
S_N_M.EnableSsl = SSl_On__Off;
S_N_M.Host = Use_Host;
S_N_M.Send(M_M);
return "ارسال شد";

}
catch (Exception ex)
{

return ex.Message.ToString();
}
}


با کلی کلنجار رفتن باهاش به این تبدیل شد :لبخند:


public string SendAlarmMail(string Use_User, string Use_Name, string TO_Address, string Mail_Subject, string Mail_Body, byte[] Address_File, string Use_Pass, int Mail_Port, bool SSl_On__Off, string Use_Host)
{
try
{
var S_N_M = new System.Net.Mail.SmtpClient();
var M_M = new MailMessage();
M_M.From = new MailAddress(Use_User, Use_Name);
M_M.To.Add(TO_Address);
M_M.Subject = Mail_Subject;
M_M.Body = Mail_Body;
M_M.BodyEncoding = Encoding.UTF8;
MemoryStream fs = new MemoryStream(Address_File);
Attachment a = new Attachment(fs, "pic.jpg", MediaTypeNames.Image.Jpeg);
M_M.Attachments.Add(a);
M_M.IsBodyHtml = false;
var mdMc = new NetworkCredential(Use_User, Use_Pass);
S_N_M.UseDefaultCredentials = false;
S_N_M.Credentials = mdMc;
S_N_M.DeliveryMethod = SmtpDeliveryMethod.Network;
S_N_M.Port = Mail_Port;
S_N_M.EnableSsl = SSl_On__Off;
S_N_M.Host = Use_Host;
S_N_M.Send(M_M);
return "ارسال شد";

}
catch (Exception ex)
{

return ex.Message.ToString();
}
}


برای استفاده هم از این کد استفاده کردم


var query1 = from c in dblq.mytables where c.giveDate == rr join o in dblq.Users on c.memberCode equals o.memberCode select new {o.email,o.pic};

foreach (var item in query1)
{
snd.SendAlarmMail("ایمیل شما",
"اسم شما", item.email,
"موضوع","متن شما ",item.pic.ToArray(),
"پسورد شما", 587, true,
"هاست شما");

587 پورت مورد استفاده هست (جیمیل)
این رو هم که بدردم نخورد الکی وقتم رو گرفت فقط ازش ایده گرفتم :بامزه:


var images = from p in query1 select Image.FromStream(new MemoryStream(p.pic.ToArray()));

از همه ی کسایی که بهم کمک کردن ممنون مخصوصا @morteza271 (http://barnamenevis.org/member.php?95103-morteza271) که راه حل رو گفتن و @uniqueboy_ara (http://barnamenevis.org/member.php?142181-uniqueboy_ara) که نحوه ی استفاده از join رو یاد دادن و @nima.sh (http://barnamenevis.org/member.php?231693-nima.sh) که دیگه تیر خلاص رو زدن بازم ممنون از راهنمایی هاتون