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.
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.");
}
}
}
Do'stlaringiz bilan baham: |