2.2.C# da Net.mail kutubxonasi bilan ishlash.
SMTP Klient sinfi elektron pochta uchun SMTP serverida ishlaydi. SMTP protokoli manzilga yo’naltiruvchi RFC 2821 standarti uchun mo’ljallangan.
SMTP Klient sinfida xabararni elektron pochtada yuborish uchun quyidagi tushunchalarni bilishimiz kerak bo’ladi:
Attachment sinfi-fayllar joylashuvini boshqaradi. Bu sinf elektron pochta xabarlarining fayl, potok yoki matnligiga qarab ularni saralaydi. MailAddress- Elektron pochta yuboruvchisi va qabul qiluvchi manzilini namoyish etadi.
MailMessage
|
-Elektron pochta xabarlarini ko’rsatadi
|
|
|
|
|
Elektron pochta xabarlarini yasash va yuborish uchun Smtp Klient yordamidan foydalanish zarur. Buning uchun quyidagi vazifalarni bajarish kerak bo’ladi:
- SMTP server-xost, Elektron pochta jo’natmalari uchun foydalaniladi. Host va Port tarkibida qarab chiqiladi.
-Credentials ma’lumotlarni to’liqligicha tekshiradi,agar bu SMTP server uchun zarur bo’lsa.
-Send va SendAsync-elektron pochta jo’natuvchilari manzili shu metodlar orqali amalga oshiriladi. Xuddi shunday vazifani MailMessage.From ham amalga oshira oladi.
-Elektron xabarlarni jo’natuvchi manzili Send va SendAsync qabul qiluvchi metod amalga oshiradi. Xuddi shunday vazifani MailMessage.To ham amalga oshira oladi.
-MailMessage.Body- Send va SendAsync metodidagi xabarlarni o’zida saqlovchi.
Elektron pochta xabarlari xizmatini yoqish uchun, avvalo Attachment sinfi yordamida ruxsatni tashkil qilish lozim, undan keyin esa unga xabar qo’shish uchun MailMessage.Attachments buyrug’idan foydalanamiz. Elektron pochta foydalanuvchilari har ikkala qabul qiluvchi tomonlar va fayl tipi ko’rinishi bir xil bo’lishi kerak, aks holda ular xabarlarni o’qiy olmasligi mumkin. Ba’zi ma’lumotlarni o’qiy olmagan foydalanuvchi uchun MailMessage.AlternateViews buyrug’i yordamida universal xabar o’qish va yuborish imkoniyati yaratiladi.
Taqdimotlar konfiguratsiyasi va kompyuter fayllar yordamida SmtpClient xost, port va quriladigan ma’lumotlarning barcha obyektlarining parametrlarini belgilashi mumkin.
Elektron pochta xabarlarini yuborish uchun va xabarlarning SMTP serverda xabar yuborilayotgan vaqtini bloklash uchun Send metodi kerak bo’ladi. Bosh patokka dasturda xabar yuborishni davom ettirish uchun SendAsync metodidan foydalaniladi. SendCompleted hodisasi SendAsync operatsiyasi ishida ruxsat vazifasini bajaradi. Bu hodisani amalga oshirish uchun SendCompleted ga SendCompletedEventHandler delegatni qo’shish kerak bo’ladi. Delegat SendCompletedEventHandler hodisasida so’rovni qaytaruvchi SendCompleted metodga murojaat qilishi zarur. Elektron pochta jo’natmalari sinxronligini yo’qotish, ishni yakunlash uchun SendAsyncCancel metodidan foydalaniladi.
Quyida berilgan kodda elektron pochtada xabarlarni qanday yuborish ko’rsatilgan:
using System;
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
using System.Threading;
using System.ComponentModel;
namespace Examples.SmptExamples.Async
{
public class SimpleAsynchronousExample
{
static bool mailSent = false;
private static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
{
// Get the unique identifier for this asynchronous operation.
String token = (string) e.UserState;
if (e.Cancelled)
{
Console.WriteLine("[{0}] Send canceled.", token);
}
if (e.Error != null)
{
Console.WriteLine("[{0}] {1}", token, e.Error.ToString());
} else
{
Console.WriteLine("Message sent.");
}
mailSent = true;
}
public static void Main(string[] args)
{
// Command line argument must the the SMTP host.
SmtpClient client = new SmtpClient(args[0]);
// Specify the e-mail sender.
// Create a mailing address that includes a UTF8 character
// in the display name.
MailAddress from = new MailAddress("jane@contoso.com",
"Jane " + (char)0xD8+ " Clayton",
System.Text.Encoding.UTF8);
// Set destinations for the e-mail message.
MailAddress to = new MailAddress("ben@contoso.com");
// Specify the message content.
MailMessage message = new MailMessage(from, to);
message.Body = "This is a test e-mail message sent by an application. ";
// Include some non-ASCII characters in body and subject.
string someArrows = new string(new char[] {'\u2190', '\u2191', '\u2192', '\u2193'});
message.Body += Environment.NewLine + someArrows;
message.BodyEncoding = System.Text.Encoding.UTF8;
message.Subject = "test message 1" + someArrows;
message.SubjectEncoding = System.Text.Encoding.UTF8;
// Set the method that is called back when the send operation ends.
client.SendCompleted += new
SendCompletedEventHandler(SendCompletedCallback);
// The userState can be any object that allows your callback
// method to identify this send operation.
// For this example, the userToken is a string constant.
string userState = "test message1";
client.SendAsync(message, userState);
Console.WriteLine("Sending message... press c to cancel mail. Press any other key to exit.");
string answer = Console.ReadLine();
// If the user canceled the send, and mail hasn't been sent yet,
// then cancel the pending operation.
if (answer.StartsWith("c") && mailSent == false)
{
client.SendAsyncCancel();
}
// Clean up.
message.Dispose();
Console.WriteLine("Goodbye.");
}
}
}
MailMessage sinfining ketma-ketlik iyerarxiyasi:
System.Object
System.Net.Mail.MailMessage
Jo’natiluvchi nomi: System.Net.Mail
to’plam : System ( System.dll)
MailMessage konstruktori:
MailMessage()-MailMessage sinfida bo’sh nusxa(ekzemplyar) ro’yxatdan o’tkazadi;
MailMessage(MailAddress, MailAddress)- MailAddress yordamida MailMessage sinfida yangi nusxa yaratadi;
MailMessage(String, String)- String sinfi obyaktlari uchun MailMessage sinfida yangi nusxa yaratadi;
MailMessage(String, String, String, String)- MailMessage sinfida yangi nusxa yaratadi.
MailMessage sinfining tarkibi:
AlternateViews-altarnativ formadagi xabarlarni saqlovchi amallar to’plamini qaytaradi;
Attachments-shu elektron pochtadagi ma’lumotlarni saqlovchi amallar to’plamini qaytaradi;
Bcc-shu elektron pochta xabarlarida yopiq holdagidagi to’plamlar manzilini qaytaradi;
Body-jo’natuvchi yoki, xabarlarning asosiy qismi saqlanadigan joy;
BodyEncoding- egalik qiluvchi yoki kodlashrituvchi xabarlar;
BodyTransferEncoding-asosiy matndagi qaytaruvchi yoki jo’natmalarni kodlashtiruvchi imkoniyatlarni yaratadi;
CC-qabul qiluvchi elektron pochta xabarlarini manzil to’plamiga qaytaradi.
DeliveryNotificationOptions-elektron pochta xabarlarining yuborilgani yoki qabul qilingani to’g’risidagi ma’lumotni qaytaradi.
From- elektron pochta yuborilgani yoki qabul qilingan xabarlarining manzili;
Headers- elektron pochtada yuborilgan xabarning nomini qaytaradi;
HeadersEncoding-elektron pochtada yuborilgan xabarning nomi foydalanuvchi uchun yuborish yoki qabul qilish uchun kodlashtiradi;
IsBodyHtml-pochta xabarlarini HTML formatidami yo’qmi, shuni tekshiradi;
ReplyTo-pochta xabarlari uchun ReplyTo manzilini yuboradi yoki qabul qiladi;
ReplyToList-ushbu elektron pochta so’rovlariga javob beruvchi manzillar ro’yxati;
Sender-jo’natuvchi manzilini ko’rsatadi;
Subject-elektron pochta xabarlarining temasini ko’rsatadi;
SubjectEncoding-elektron pochta xabarlarining temasi kodirovkasini yuboradi;
To-elektron pochta xabarlarini jo’natuvchi manzillar to’plami;
MailMassage sinfi ekzemplyarlari elektron pochta xabarlarini tayyorlashda SMTP serverga SmtpClient sinfi yordamida jo’natuvchi sinf hisoblanadi. MailMassage dan foydalanishdan oldin MailMassage obyektlari initsializatsiyalovchi jo’natuvchi parametrlari, qabul qiluvchi, nomi va elektron pochta xabarlarini ko’rsatadi. Bu parametrlar ustida ishlash uchun ruxsat MailMessage obyektlari tarkibi orqali amalga oshiriladi.
Quyidagi misolda xabar yasash va jo’natish uchun bajarilgan amallar ketma-ketligi ko’rsatilgan: (C#da)
public static void CreateMessageWithAttachment(string server)
{
// Specify the file to be attached and sent.
// This example assumes that a file named Data.xls exists in the
// current working directory.
string file = "data.xls";
// Create a message and set up the recipients.
MailMessage message = new MailMessage(
"jane@contoso.com",
"ben@contoso.com",
"Quarterly data report.",
"See the attached spreadsheet.");
// Create the file attachment for this e-mail message.
Attachment data = new Attachment(file, MediaTypeNames.Application.Octet);
// Add time stamp information for the file.
ContentDisposition disposition = data.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(file);
disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
disposition.ReadDate = System.IO.File.GetLastAccessTime(file);
// Add the file attachment to this e-mail message.
message.Attachments.Add(data);
//Send the message.
SmtpClient client = new SmtpClient(server);
// Add credentials if the SMTP server requires them.
client.Credentials = CredentialCache.DefaultNetworkCredentials;
try {
client.Send(message);
}
catch (Exception ex) {
Console.WriteLine("Exception caught in CreateMessageWithAttachment(): {0}",
ex.ToString() );
}
// Display the values in the ContentDisposition for the attachment.
ContentDisposition cd = data.ContentDisposition;
Console.WriteLine("Content disposition");
Console.WriteLine(cd.ToString());
Console.WriteLine("File {0}", cd.FileName);
Console.WriteLine("Size {0}", cd.Size);
Console.WriteLine("Creation {0}", cd.CreationDate);
Console.WriteLine("Modification {0}", cd.ModificationDate);
Console.WriteLine("Read {0}", cd.ReadDate);
Console.WriteLine("Inline {0}", cd.Inline);
Console.WriteLine("Parameters: {0}", cd.Parameters.Count);
foreach (DictionaryEntry d in cd.Parameters)
{
Console.WriteLine("{0} = {1}", d.Key, d.Value);
}
data.Dispose();
}
MailAddress sinfi SmtpClient и MailMessage sinflari bilan birgalikda ishlaydi. Bu electron pochta xabarlarining saqlanishi uchun foydalaniladi.
Pochta manzili User nomi, Host nomi, unchalik muhim bo’lmagan DisplayName nomlaridan iborat bo’ladi. DisplayName o’zida belgilar, agar kodlashtirilmagan bo’lsa, ASCII naborida chiqmaydi.
MailAddress sinfi elektron pochta manzillarining quyidagi formatlarini o’zida jamlagan:
-user@host- oddiy format manzili. Agar DisplayName e’lon qilinmagan bo’lsa, shu formatdan foydalaniladi.
-DisplayName-standart format bo’lib, qavs ichida "display name" so’zi yoziladi. Agar DisplayName e’lon qilingan bo’lsa, shu format yaratiladi.
-User nomi atrofida burchak to’plam qo’shiladi, agar Host"display name" user@host yoqilmagan bo’lsa.
- display name uchun DisplayName qavs ichiga olinadi, agar ular yoqilmagan bo’lsa.
-Yunikod belgisi DisplayName ni qo’llab quvvatlaydi(поддерживаются).
-User moni qavs ichida, masalan, "user name"@host .
-foydalanuvchining davomiy ba yakuniy nuqtalarda e’lon qilinishi: user...name..@host.
-kvadrat to’plamlarda domenlar literali, masalan, .
- (Примечания) fikr yuborilishdan oldin o’chirib yuboriladi: (comment)"display name"(comment)<(comment)user(comment)@(comment)domain(comment)>(comment).
Agar foydalanuvchi nomi qavs ichida bo’lsa, butun matn qatordan boshlab manzilgacha DisplayName ning qismi hisoblanadi. Tahlilning yoqilishi:masalan:( tahlil qilinmaydi) qatnashchi nomi(tahlil qilinmaydi)qavssiz(tahlil qilinmaydi) < user@host >
Quyidagi misolda jo’natiluvchi elektron pochta xabarlari SmtpClient, MailAddress va MailMessage sinflari yordamida yaratiladi:
public static void CreateCopyMessage(string server)
{
MailAddress from = new MailAddress("ben@contoso.com", "Ben Miller");
MailAddress to = new MailAddress("jane@contoso.com", "Jane Clayton");
MailMessage message = new MailMessage(from, to);
// message.Subject = "Using the SmtpClient class.";
message.Subject = "Using the SmtpClient class.";
message.0+-
8*Body = @"Using this feature, you can send an e-mail message from an application very easily.";
// Add a carbon copy recipient.
MailAddress copy = new MailAddress("Notification_List@contoso.com");
message.CC.Add(copy);
SmtpClient client = new SmtpClient(server);
// Include credentials if the server requires them.
client.Credentials = CredentialCache.DefaultNetworkCredentials;
Console.WriteLine("Sending an e-mail message to {0} by using the SMTP host {1}.",
to.Address, client.Host);
try {
client.Send(message);
}
catch (Exception ex) {
Console.WriteLine("Exception caught in CreateCopyMessage(): {0}",
ex.ToString() );
}
}
Local mashinada xat yuborish kodi
using (MailMessage mm = new MailMessage("Name ", "to@site.com")){
mm.Subject = "Mail Subject";
mm.Body = "Mail Body";
mm.IsBodyHtml = false;
using (SmtpClient sc = new SmtpClient("127.0.0.1")){//Здесь должен быть адрес почтового сервера и порт, если необходимо
sc.Send(mm);
}
}
|
|
|
SMTP-сервер: smtp.gmail.com
Порт: 587
|
|
Gmail xizmati yordamida xat yuborish kodi:
using (MailMessage mm = new MailMessage("Name ", "to@site.com")){
mm.Subject = "Mail Subject";
mm.Body = "Mail Body";
mm.IsBodyHtml = false;
using (SmtpClient sc = new SmtpClient("smtp.gmail.com", 587)){
sc.EnableSsl = true;
sc.DeliveryMethod = SmtpDeliveryMethod.Network;
sc.UseDefaultCredentials = false;
sc.Credentials = new NetworkCredential("from@gmail.com", "GmailPassword");
sc.Send(mm);
}
}
|
|
|
|
Yandex xizmati orqali xat yuborish kodi:
Mail.ru xizmati orqali xat yuborish kodi:
using (MailMessage mm = new MailMessage("Name ", "to@site.com")){
mm.Subject = "Mail Subject";
mm.Body = "Mail Body";
mm.IsBodyHtml = false;
using (SmtpClient sc = new SmtpClient("smtp.mail.ru", 25)){
sc.EnableSsl = true;
sc.DeliveryMethod = SmtpDeliveryMethod.Network;
sc.UseDefaultCredentials = false;
sc.Credentials = new NetworkCredential("from@mail.ru", "MailRuPassword");
sc.Send(mm);
}
}
|
Do'stlaringiz bilan baham: |