מחלקה גנרית לשליחת מייל בC#
-
מצ"ב מחלקה עם מתודה לשליחת מיילים בצורה גנרית.
הקדמה:
המחלקה משתמשת בחשבון גימייל לשליחת מייל, לא ניסיתי להתעסק עם הגדרות של חשבונות אחרים כיון שזה הכי נפוץ וזמין.
את הגדרות החשבון אנו מגדירים בקובץ הקונפיגורציה של האפליקציה (app.config או web.config) כך:<appSettings> <!--הגדרות חשבון גימייל לאפליקציה--> <add key="From" value="שם השולח כפי שיוצג לנמען"/> <add key ="SMTPUserName" value="כתובת המייל של השולח - דהיינו החשבון שלנו"/> <add key="SMTPPasssword" value="סיסמת החשבון שלנו"/> <!--סוף הגדרות חשבון גימייל--> </appSettings>
יש לנו 2 מחלקות: המחלקה הראשונה מכילה את הפרטים של ההודעה, והשניה מכילה את המתודה לשליחת ההודעה.
יש ליצור אובייקט של הודעה, להכניס את הערכים הרצויים, ואח"כ להשתמש במתודה SendEMail לשליחת ההודעה לנמען.
זה תומך גם בריבוי נמענים, וכן בריבוי קבצים מצורפים.
בהצלחה!!using System; using System.Collections.Generic; using System.Configuration; using System.Net; using System.Net.Mail; using System.Text; public class MessageGmail { //חשוב להקפיד שהערכים יהיו כך //key=שם הנמען,value=כתובת המייל שלו public Dictionary<string, string> ToList { get; set; } = new Dictionary<string, string>(); public string Subject { get; set; } public string Body { get; set; } public bool IsBodyHtml { get; set; } = false; public List<Attachment> ListFileAttachment { get; set; } = new List<Attachment>(); } public static class SendMail { private static string senderName = ConfigurationManager.AppSettings["From"].ToString(); private static string senderEmailId = ConfigurationManager.AppSettings["SMTPUserName"].ToString(); private static string password = ConfigurationManager.AppSettings["SMTPPasssword"].ToString(); private static MailAddress fromAddress = new MailAddress(senderEmailId, senderName); public static bool SendEMail(MessageGmail message) { var success = false; var msg = createMessage(message); msg = addFilesToMessage(message, msg); var client = createClient(); try { client.Send(msg); success = true; } catch(Exception ex) { //להוסיף דיוח על שגיאה אם רוצים } return success; } private static MailMessage createMessage(MessageGmail message) { MailMessage msg = new MailMessage() { From = fromAddress, Subject = message.Subject, Body = message.Body, IsBodyHtml = message.IsBodyHtml, SubjectEncoding = Encoding.UTF8, BodyEncoding = Encoding.UTF8 }; //מצרף את כתובות המייל לשליחה foreach (var address in message.ToList) { var ToAddress = new MailAddress(address.Value, address.Key); msg.To.Add(ToAddress); } return msg; } private static SmtpClient createClient() { SmtpClient client = new SmtpClient("smtp.gmail.com", 587); client.EnableSsl = true; client.Credentials = new NetworkCredential(fromAddress.Address, password); return client; } private static MailMessage addFilesToMessage(MessageGmail originalMessage, MailMessage msg) { if (originalMessage.ListFileAttachment!= null) { foreach (var file in originalMessage.ListFileAttachment) { msg.Attachments.Add(file); } } return msg; } }
טסט:
[TestClass()] public class SendMailTests { string path = @"C:\Users\Latitude E7240\Downloads\RecieptDonationNo1.pdf"; string path2 = @"C:\Users\Latitude E7240\Documents\InvoiceNo.2837.pdf"; MessageGmail message = new MessageGmail(); [TestMethod()] public void SendEMailTest() { message.ToList.Add("ישראל ישראלי", "israel@gmail.com"); message.ToList.Add("אליהו הנביא", "eliau@gmail.com"); message.Subject = "בדיקה בדיקה בדיקה"; message.Body = "test test test"; message.ListFileAttachment.Add(new Attachment(path)); message.ListFileAttachment.Add(new Attachment(path2)); SendMail.SendEMail(message); } }הבדיקה עברה בהצלחה :lol:
פורסם במקור בפורום CODE613 ב21/03/2016 17:55 (+02:00)
-
Send.cs
using System; using System.Collections.Generic; using System.Configuration; using System.Net; using System.Net.Mail; using System.Text; public class MessageGmail { //חשוב להקפיד שהערכים יהיו כך //key=שם הנמען,value=כתובת המייל שלו public Dictionary<string, string> ToList { get; set; } = new Dictionary<string, string>(); public string Subject { get; set; } public string Body { get; set; } public bool IsBodyHtml { get; set; } = false; public List<Attachment> ListFileAttachment { get; set; } = new List<Attachment>(); } public static class SendMail { private static string senderName = ConfigurationManager.AppSettings["From"].ToString(); private static string senderEmailId = ConfigurationManager.AppSettings["SMTPUserName"].ToString(); private static string password = ConfigurationManager.AppSettings["SMTPPasssword"].ToString(); private static MailAddress fromAddress = new MailAddress(senderEmailId, senderName); public static bool SendEMail(MessageGmail message) { var success = false; var msg = createMessage(message); msg = addFilesToMessage(message, msg); var client = createClient(); try { client.Send(msg); success = true; } catch (Exception ex) { //להוסיף דיוח על שגיאה אם רוצים } return success; } private static MailMessage createMessage(MessageGmail message) { MailMessage msg = new MailMessage() { From = fromAddress, Subject = message.Subject, Body = message.Body, IsBodyHtml = message.IsBodyHtml, SubjectEncoding = Encoding.UTF8, BodyEncoding = Encoding.UTF8 }; //מצרף את כתובות המייל לשליחה foreach (var address in message.ToList) { var ToAddress = new MailAddress(address.Value, address.Key); msg.To.Add(ToAddress); } return msg; } private static SmtpClient createClient() { SmtpClient client = new SmtpClient("smtp.gmail.com", 587); client.EnableSsl = true; client.Credentials = new NetworkCredential(fromAddress.Address, password); return client; } private static MailMessage addFilesToMessage(MessageGmail originalMessage, MailMessage msg) { if (originalMessage.ListFileAttachment != null) { foreach (var file in originalMessage.ListFileAttachment) { msg.Attachments.Add(file); } } return msg; } }
Program.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net.Mail; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { MessageGmail mg = new MessageGmail(); mg.Subject = "test"; mg.Body = "test"; mg.ToList.Add("שם המייל", "כתובת המייל"); SendMail.SendEMail(mg); } } }
פורסם במקור בפורום CODE613 ב29/08/2016 11:34 (+03:00)
-
צרפתי.
צריך Visual Studio 15 Preview 4 כדי לפתוח.
העלו פה קישור להתקנה.פורסם במקור בפורום CODE613 ב31/08/2016 13:49 (+03:00)
-
קודם כל בפרוייקט שצירפת לא הגדרת שום חשבון לשליחה, (אני מניח כדי שלא נוכל לפרוץ לך לגימייל..). אז בהנחה שאתה מגדיר את כל הפרטים בצורה נכונה ומדוייקת.
אצלי זה עובד!
אולם ניסיתי עם חשבון מייל אחר, וקיבלתי מייד מייל מגוגל שמישהו ניסה להתחבר לחשבון שלי דרך אפליקציה שאינה עומדת בתקני האבטחה המחמירים של גוגל <!-- s8-) --><img src="{SMILIES_PATH}/icon_cool.gif" alt="8-)" title="מגניב" /><!-- s8-) --> ולכן הם חסמו זאת.. אז ככל הנראה זאת הסיבה שזה לא עובד אצלך.
תבדוק בחשבון המייל שלך אם אתה מקבל את ההודעה הבאה:
עיין בקישור הבא כיצד אתה יכול לשנות את הגדרות החשבון כדי שיאפשרו שליחת מייל דרך אפליקציהבמייל שלי אני אפשרתי זאת (כדי לאפשר לאאוטלוק להשתמש במייל של גוגל..)
בהצלחה!פורסם במקור בפורום CODE613 ב31/08/2016 15:34 (+03:00)
-
לא קיבלתי כזו הודעה.
בקובץ הקונפיגורציה הגדרת טוב את חשבון המייל השולח? כי בקובץ שצירפת לא היה מוגדר כלום..
אתה צריך להחליף את המילים "כתובת המייל של השולח - דהיינו החשבון שלנו" בחשבון הגימייל שלך כולל הסיומת @gmail.com
ובמקום "סיסמת החשבון שלנו" לכתוב את הסיסמא שאתה אתה נכנס לחשבון.
אם למרות זאת זה לא עובד - אולי יש לך בעיה בתעבורת האינטרנט במחשב..פורסם במקור בפורום CODE613 ב01/09/2016 14:55 (+03:00)
-
היה לי בעיה דומה בשליחה מתוכנה אחרת. גימייל לפעמים חסמו ולפעמים לא, לפעמים שלחו את ההודעה ולפעמים לא, ובפעמים שחסמו ולא שלחו הודעה, פשוט לא מצאתי בגימייל היכן אמורים לטפל בהגדרה הזו ולכן לא יכלתי לפרוץ את הגישה.
פורסם במקור בפורום CODE613 ב02/09/2016 11:37 (+03:00)
-
@מתכנת
לא קיבלתי כזו הודעה.בקובץ הקונפיגורציה הגדרת טוב את חשבון המייל השולח? כי בקובץ שצירפת לא היה מוגדר כלום..
אתה צריך להחליף את המילים "כתובת המייל של השולח - דהיינו החשבון שלנו" בחשבון הגימייל שלך כולל הסיומת @gmail.com
ובמקום "סיסמת החשבון שלנו" לכתוב את הסיסמא שאתה אתה נכנס לחשבון.
אם למרות זאת זה לא עובד - אולי יש לך בעיה בתעבורת האינטרנט במחשב..כן.
פורסם במקור בפורום CODE613 ב04/09/2016 18:06 (+03:00)