5 Ağustos 2015 Çarşamba

E-Posta Gönderme - C#

Giriş
C# ile e-posta gönderme için iki seçenek bulunuyor. İlk seçenekte bilgisayarda kurulu Outlook'a Interop aracılığyla bağlanıp e-posta göndermesini söylüyoruz. Bu durumda gönderilen e-posta "Sent" dizininde de görülebiliyor.

İlk Seçenek Outlook Interop
Projeye Add Reference menüsünden Outlook assembly'si eklenir. Assemblies > Extensions > Microsoft.Office.Interop.Outlook eklenir. Basit bir metin gönderme örneği:

// Create the Outlook application.
    Outlook.Application oApp = new Outlook.Application();
    // Create a new mail item.
    Outlook.MailItem oMsg = (Outlook.MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem);
    // Set HTMLBody. 
    //add the body of the email
    oMsg.HTMLBody = "Hello, Jawed your message body will go here!!";
    //Subject line
    oMsg.Subject = "Your Subject will go here.";
    // Add a recipient.
    Outlook.Recipients oRecips = (Outlook.Recipients)oMsg.Recipients;
    // Change the recipient in the next line if necessary.
    Outlook.Recipient oRecip = (Outlook.Recipient)oRecips.Add("jawed.ace@gmail.com");
    oRecip.Resolve();
    // Send.
    oMsg.Send();

İkinci Seçenek System.Net.Mail Sınıfları
Tam çalışan örnek:
Sınıflara bakmadan önce tam çalışan bir örnek eklemek istedim.
MailMessage mail = new MailMessage();
mail.From = new MailAddress("abc@mydomain.com", "Enquiry");
mail.To.Add("munjal.pandya@yahoo.com");
mail.IsBodyHtml = true;
mail.Subject = "Registration";
mail.Body = "Some Text";
mail.Priority = MailPriority.High;

SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
//smtp.UseDefaultCredentials = true;
smtp.Credentials = new System.Net.NetworkCredential("xyz@gmail.com", "<mypwd>");
smtp.EnableSsl = true;
//smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Send(mail);

Attachment sınıfı
E-postadaki eklentiyi temsil eder. Inline attachent şöyle gönderilir.
string attachmentPath = Environment.CurrentDirectory + @"\test.png";
Attachment inline = new Attachment(attachmentPath);
inline.ContentDisposition.Inline = true;
inline.ContentDisposition.DispositionType = DispositionTypeNames.Inline;
inline.ContentId = contentID;
inline.ContentType.MediaType = "image/png";
inline.ContentType.Name = Path.GetFileName(attachmentPath);

message.Attachments.Add(inline);


MailAddress sınıfı
Bu sınıf Java'daki Internet address sınıfına benziyor. Örnek:
new MailAddress("abc@mydomain.com", "Enquiry");
MailMessage  sınıfı
Mesajın içeriğini saklayan sınıf

MailMessage sınıfı Disposable olduğu için using ile kullanmak gerekir.
// .NET 4.0 only for SmtpClient disposing
using (var smtpClient = new SmtpClient(_host, _portNumber))
{
  using (var mailMsg = new MailMessage())
  {
    ...
    smtpClient.Send(mailMsg);
  }
}
From Alanı
Kimden geldiğini gösterir. MailAddress nesnesi atanır.

Priority Alanı
Yüksek öncelik verilebilir.Örnek:
MailMessage mailMsg = new MailMessage();
mailMsg.Priority = MailPriority.High; //I want to know now!
To Alanı
MailAddressCollection türünden olan bu alana liste ekleme metodu bulunmuyor. Şöyle yapılabilir.
List<string> recipientAddresses = ...
var mailMsg = new MailMessage();
recipientAddresses.ForEach(p => mailMsg.To.Add(p));

SmtpClient Sınıfı
Bu sınıf Java'daki Transport'a benziyor.

Constructor metodu
Sınıfın bir kaç tane constructor metodu var.
En kolay hedef e-posta sunucusu ve port numarasını beraber veren metod. Bu arada SMTP port numarası olarak artık 25 yerine çoğunlukla 587 kullanılıyor.
SmtpClient smtpClient = new SmtpClient("mailexchanger_String", 587);
Send metodu
MailMessage nesnesini gönderir. Örnek:
MailMessage mail = ...
SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
smtp.Send(mail);

SmptpClient sınıfı Disposable olduğu için using ile kullanmak gerekir

using (SmtpClient smtpClient = new SmtpClient(...))
{
...
}



Hiç yorum yok:

Yorum Gönder