NET/משלוח אימייל

< NET
תכנות בסביבת NET








בסביבת הדוט נט ישנן שתי ספריות העוסקות בכך:

1. System.Web.Mail

2. System.Net.Mail


ספריה System.Web.Mail הוכללה בדוט נט 1, וענתה באופן חלקי על שליחת אימייל. מאמר זה יתמקד בספריה החדשה יותר, System.Net.Mail, שקיימת החל מגרסה 2 של הדוט נט, ובה מענה טוב יותר לסוגים שונים של משלוח אימייל.

ספריית System.Net.Mail מכילה בתוכה מספר מחלקות המאפשרות שליחת אימייל באמצעות פרוטוקול Smtp

הספריות העיקריות הן:

  • MailMessage - המאפשרת להגדיר הודעת אימייל על מרכיביה השונים.
  • SmtpClient - המאפשרת להגדיר קשר עם השרת ולשלוח אימייל

שליחה בסיסית

עריכה

שליחה בסיסית ב-VB תעשה באופן הבא:

התייחסות לספריה:

Imports System.Net.Mail

הגדרה של הודעת האימיל והתכנים שבה

 Dim myMailMessage As New MailMessage()

 myMailMessage.From = New MailAddress("SenderEmail@comapny.suffix") 

 myMailMessage.To.Add("To1@comapny.suffix[,To2@comapny.suffix]")

 myMailMessage.Subject = "Subject"

 myMailMessage.Body = "Body"


לחילופין ניתן להמיר את השורות עד כה, להגדיר את הודעת האימייל באופן מקוצר:

 Dim myMailMessage As New MailMessage("from", "To", "Subject", "Body")


לאחר מכן יש להגדיר לקוח Smtp ולבצע את המשלוח של האימייל

 Dim mySmtpClient As New SmtpClient(smtpIp, port)

 mSmtpClient.Send(myMailMessage)


כתיב עוד יותר מקוצר של כל התהליך הוא באופן הבא:

 Dim MySmtpClient As New SmtpClient(smtpIp, port)
 MySmtpClient.Send(New MailMessage("from", "To", "Subject", "Body"))


במידה ומשלוח האימייל לא התבצע, אפשר ללכוד את הודעות השגיאה השונות באמצעות Exception.


אם השרת דורש אימות (authentication) יש להוסיף את שתי הפקודות הבאות:

 mySmtpClient.Credentials = New Net.NetworkCredential(UserName, Password)
 mySmtpClient.UseDefaultCredentials=false

אם הוא דורש משלוח מוצפן, יש להוסיף את הפקודה:

 mySmtpClient.EnableSsl = True


לסיום יש לשחרר את המחלקה

myMailMessage.Dispose()

ניתן להתרשם בדוגמאות אלו מהפשטות והאלגנטיות של שליחת האימייל באמצעות ספריה זו.

אפשרויות מתקדמות

עריכה

כמובן שבספריה זו ישנן הרבה אפשרויות מתקדמות יותר, כמו שימוש במשלוח מוצפן (EnableSsl) (שימושי למשל לג'ימייל), כתיבה לכותרת של האימייל - Headers, הוספת צרופות (Attachments), שליטה בשיטת הקידוד (Encoding) של חלקם שונים מהאימייל, שליטה בהודעות על משלוח ההודעה (DeliveryNotification), דירוג עדיפות האימייל (Priority), משלוח אסינכרוני של אימייל (SendAsync) ועוד. ניתן לראות שאפשר לשלוח ריבוי אימיילים באותה שורה באמצעות שיטות שונות.

דוגמה - VB

עריכה

דוגמה. משלוח אימייל באמצעות שרת 012.net.il:

Imports System.Net.Mail

Public Function SendMailMessage(ByVal UserName As String, ByVal Password As String) As Boolean
 Dim MySmtpClient As New SmtpClient("smtp.012.net.il", "25")
 MySmtpClient.Credentials = New Net.NetworkCredential(UserName, Password)
 MySmtpClient.UseDefaultCredentials=False
 Try
   MySmtpClient.Send(New MailMessage("bibinat@012.net.il", _
                      "alon123@gmail.com", "Hello", "What's new?"))
   Return True
 Catch ex As SmtpException
   Console.WriteLine(ex.Message)
   Return False
 End Try
End Function

דוגמה - C#

עריכה

דוגמה של פונקציה למשלוח אימייל. ניתן לשלוח אימיילים רגילים ואימיילים מוצפנים כדוגמת השירות בג'ימייל.

using System.Net;
using System.Net.Mail;

private void button1_Click(object sender, EventArgs e)
{
    // regular
    SendMailQuick("mail.smartvmd.com", 25, false, "MyPassword", new MailAddress("XXX@YYY.com", "senderName"),
         new MailAddress("myRecipient@YYY.com", "myRecipient"), "subjectText", "bodyText");

    // Gmail
    SendMailQuick("Smtp.gmail.com", 587, true, "MyPassword", new MailAddress("XXXX@gmail.com", "senderName"),
        new MailAddress("myRecipient@YYY.com", "myRecipient"), "subjectText", "bodyText");
 
}


public static void SendMailQuick(string smpt, int port, bool ssl, string fromPassword,
    MailAddress fromAddress, MailAddress toAddress, string subject, string body)
{
    var smtp = new SmtpClient
    {
        Host = smpt,
        Port = port,
        EnableSsl = ssl,
        DeliveryMethod = SmtpDeliveryMethod.Network,
        UseDefaultCredentials = false,
        Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
    };

    using (var mailMessage = new MailMessage(fromAddress, toAddress) {
        Subject = subject, Body = body })
    try
    {
        smtp.Send(mailMessage);
    }
    catch (Exception exp) 
    { 
        Console.WriteLine(exp.Message); 
    }
}

קישורים חיצוניים

עריכה