יום שני, 11 באוקטובר 2010

יצירת תוכנת מייל C# - mail client


נתייחס לג'ימייל, אך השימוש נכון גם לכל שרת מייל אחר.
מיקמתי את הקוד המלא  כאן:

לאחר שיצרנו את הטופס-ממשק משתמש כפי שרצינו, נלחץ פעמיים על כפתור 'שלח' כדי להגיע לקוד של הטופס.



ראשית, נוסיף בראש הדף התייחסויות שימוש במחלקות של רשת ומייל:

using System.Net;
using System.Net.Mail;
את הקוד כדאי לתחום בתוך try..catch, כדי למנוע נפילות של התוכנית במקרה פשוט, למשל- מקרה של חוסר חיבור לאינטרנט.
כעת אציג את כל הקוד של הפעולה הבסיסית של לחיצה על 'שלח':
MailMessage msg = new MailMessage();
SmtpClient myServer = new SmtpClient("smtp.gmail.com", 587);
myServer.EnableSsl = true; // SSL ג'ימייל דורש
SmtpServer.Credentials = new NetworkCredential("user@gmail.com", "password");

msg.From = new MailAddress(txtb_from.Text, txt_name.Text, System.Text.Encoding.UTF8);

נשים לב, כי ג'ימייל דורש חיבור SSL. מעבר לכך הגדרנו את הקידוד של הדף ל-UTF8 כדי שיישלח בעברית קריאה.
לשם הוספת כתובות רבות לשליחה אליהן, נשתמש בטריק. נקבע שהכתובות יופרדו בפסיקים (,), ונחלק את המחרוזת. ()Trim מסיר רווחים מיותרים:
String[] adresses = txtb_to.Text.Split(',');
for (int i = 0; i < adresses.Length; i++)
      msg.To.Add(new MailAddress(adresses[i].Trim() ) );

נמשיך בהוספת נושא מייל, ואת גוף המייל:
msg.Subject = txtBox_Subject.Text;
msg.Body = richTextBox.Text; 
msg.ReplyTo = new MailAddress(txtb_From.Text);

msg.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
msg.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
SmtpServer.Send(msg);

כדאי להוסיף לסוף הקוד חיווי שנדע שהמייל נשלח בהצלחה:
MessageBox.Show("מייל נשלח בהצלחה");
וכמו כן להוסיף חיווי על כשלון בשליחה, בתוך catch: 
catch (System.Exception ex)
{
    MessageBox.Show("שגיאה - \n" + ex.Message);
}

הוספת קבצים למייל - באחד הפוסטים הבאים.

הקוד המלא:
private void btn_Send_Click(object sender, EventArgs e)
{
   try
   {
      MailMessage msg = new MailMessage();
      SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com", 587);
      SmtpServer.EnableSsl = true; 
 
      SmtpServer.Credentials = new NetworkCredential(
                           txtb_Account.Text.Trim().ToString(), 
                           txtb_Password.Text.Trim().ToString());

      msg.From = new MailAddress(
                           txtb_From.Text.Trim(), txtb_Name.Text, 
                           System.Text.Encoding.UTF8);

      String[] adresses = txtb_To.Text.Split(',');
      for (int i = 0; i < adresses.Length; i++)
      msg.To.Add(new MailAddress(adresses[i].Trim()));

      msg.Subject = txtb_Subject.Text;
      msg.Body = richTextBox1.Text;
      msg.ReplyTo = new MailAddress(txtb_From.Text.Trim());

      msg.DeliveryNotificationOptions = 
                           DeliveryNotificationOptions.OnFailure;
      msg.DeliveryNotificationOptions = 
                           DeliveryNotificationOptions.OnSuccess;

      SmtpServer.Send(msg);
   }
   catch (System.Exception ex)
   {
      MessageBox.Show("error - " + ex.Message);
   }
}






אין תגובות:

הוסף רשומת תגובה