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.
33
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.
34
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)
{
35
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'});
36
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:
37
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;
38
-
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",
39
"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");
40
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.
41
-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)>(com
ment).
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.
42
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 ",
43
"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);
44
}
}
Do'stlaringiz bilan baham: |