Gunakan Klien SMTP untuk Mengirim Email, Meneruskan Pesan & Melakukan Mail Merge di C#

Mengirim Email

Kirim Email dengan Kelas SmtpClient

The SmtpClient kelas memungkinkan aplikasi mengirim email melalui Simple Mail Transfer Protocol (SMTP).

Salah satu fitur utamanya adalah kemampuan untuk mengirim pesan secara massal.

Ini juga sepenuhnya mendukung sinkron dan asinkron model pemrograman. Untuk mengirim email yang memblokir thread utama sampai operasi selesai, pengembang dapat menggunakan salah satu cara sinkron Kirim metode. Sebagai alternatif, untuk memungkinkan thread utama terus berjalan saat email sedang dikirim, pengembang dapat menggunakan SendAsync metode.

Selain itu, SmtpClient mendukung pengiriman pesan dalam Transport Neutral Encapsulation Format (TNEF).

Kirim Email Secara Sinkron

Pesan email dapat dikirim secara sinkron menggunakan Kirim metode dari SmtpClient kelas. Ia mengirim pesan email yang ditentukan melalui server SMTP untuk pengiriman. Untuk mengirim pesan email secara sinkron, ikuti langkah-langkah berikut:

  1. Buat sebuah instance dari MailMessage kelas dan atur propertinya.
  2. Buat sebuah instance dari SmtpClient kelas dan tentukan Host, port, nama pengguna & Kata Sandi.
  3. Kirim Pesan menggunakan Kirim metode dari SmtpClient kelas dan melewatkan MailMessage instance.

Potongan kode C# berikut menunjukkan cara mengirim email outlook secara sinkron.

// Declare msg as MailMessage instance
MailMessage msg = new MailMessage();

// Create an instance of SmtpClient class
SmtpClient client = new SmtpClient();

// Specify your mailing host server, Username, Password, Port # and Security option
client.Host = "mail.server.com";
client.Username = "username";
client.Password = "password";
client.Port = 587;
client.SecurityOptions = SecurityOptions.SSLExplicit;

try
{
    // Client.Send will send this message
    client.Send(msg);
    Console.WriteLine("Message sent");
}
catch (Exception ex)
{
    Trace.WriteLine(ex.ToString());
}

Kirim Email secara Asinkron

Kadang-kadang, Anda mungkin ingin mengirim email secara asinkron agar program dapat melanjutkan operasi lain sementara email dikirim di latar belakang. Mulai .NET Framework 4.5, Anda dapat menggunakan metode asinkron yang diimplementasikan sesuai TAP model. Potongan kode C# di bawah ini menunjukkan cara mengirim pesan email Outlook menggunakan metode berbasis pola asinkron tugas:

  • SendAsync Mengirim pesan yang ditentukan.

  • IAsyncSmtpClient - Memungkinkan aplikasi mengirim pesan dengan menggunakan Simple Mail Transfer Protocol (SMTP).

  • SmtpClient.CreateAsync - Membuat instance baru dari kelas Aspose.Email.Clients.Smtp.SmtpClient

  • SmtpSend - Set parameter metode Aspose.Email.Clients.Smtp.IAsyncSmtpClient.SendAsync(Aspose.Email.Clients.Smtp.Models.SmtpSend).

  • SmtpForward - Argumen Aspose.Email.Clients.Smtp.IAsyncSmtpClient.ForwardAsync(Aspose.Email.Clients.Smtp.Models.SmtpForward).

// Authenticate the client to obtain necessary permissions
static readonly string tenantId = "YOU_TENANT_ID";
static readonly string clientId = "YOU_CLIENT_ID";
static readonly string redirectUri = "http://localhost";
static readonly string username = "username";
static readonly string[] scopes = { "https://outlook.office.com/SMTP.Send" };

// Use the SmtpAsync method for asynchronous operations
static async Task Main(string[] args)
{
    await SmtpAsync();
    Console.ReadLine();
}

static async Task SmtpAsync()
{
    // Create token provider and get access token
    var tokenProvider = new TokenProvider(clientId, tenantId, redirectUri, scopes);
    var client = SmtpClient.CreateAsync("outlook.office365.com", username, tokenProvider, 587).GetAwaiter().GetResult();

    // Create a message to send
    var eml = new MailMessage("from@domain.com", "to@domain.com", "test subj async", "test body async");
    
    // send message
    var sendOptions = SmtpSend.Create();
    sendOptions.AddMessage(eml);
    await client.SendAsync(sendOptions);
    Console.WriteLine("message was sent");

    // forward message
    var fwdOptions = SmtpForward.Create();
    fwdOptions.SetMessage(eml);
    fwdOptions.AddRecipient("rec@domain.com");
    await client.ForwardAsync(fwdOptions);
    Console.WriteLine("message was forwarded");
}

// Token provider implementation
public class TokenProvider : IAsyncTokenProvider
{
    private readonly PublicClientApplicationOptions _pcaOptions;
    private readonly string[] _scopes;

    public TokenProvider(string clientId, string tenantId, string redirectUri, string[] scopes)
    {
        _pcaOptions = new PublicClientApplicationOptions
        {
            ClientId = clientId,
            TenantId = tenantId,
            RedirectUri = redirectUri
        };

        _scopes = scopes;
    }

    public async Task<OAuthToken> GetAccessTokenAsync(bool ignoreExistingToken = false, CancellationToken cancellationToken = default)
    {

        var pca = PublicClientApplicationBuilder
            .CreateWithApplicationOptions(_pcaOptions).Build();

        try
        {
            var result = await pca.AcquireTokenInteractive(_scopes)
                .WithUseEmbeddedWebView(false)
                .ExecuteAsync(cancellationToken);

            return new OAuthToken(result.AccessToken);
        }
        catch (MsalException ex)
        {
            Console.WriteLine($"Error acquiring access token: {ex}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex}");
        }

        return null;
    }

    public void Dispose()
    {

    }
}

Kirim Pesan dari Disk

File EML berisi header, body pesan, dan lampiran. Aspose.Email memungkinkan pengembang bekerja dengan file EML dalam berbagai cara. Bagian ini menunjukkan cara memuat file EML dari disk dan mengirimnya sebagai email dengan SMTP. Anda dapat memuat file .eml dari disk atau stream ke dalam MailMessage kelas dan mengirim pesan email menggunakan SmtpClient kelas. The MailMessage kelas adalah kelas utama untuk membuat pesan email baru, memuat file pesan email dari disk atau stream, dan menyimpan pesan. Potongan kode C# berikut menunjukkan cara mengirim pesan yang disimpan dari disk.

// Load an EML file in MailMessage class
var message = MailMessage.Load(dataDir + "test.eml");

// Send this message using SmtpClient
var client = new SmtpClient("host", "username", "password");
            
try
{
    client.Send(message);
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}            

Kirim Email dalam Teks Biasa

The Body properti, properti dari MailMessage kelas, digunakan untuk menentukan konten teks biasa dari isi pesan. Untuk mengirim pesan email teks biasa, ikuti langkah-langkah berikut:

  • Buat sebuah instansi dari MailMessage kelas.
  • Tentukan alamat email pengirim dan penerima dalam MailMessage instance.
  • Tentukan Body konten, digunakan untuk pesan teks biasa.
  • Buat sebuah instansi dari SmtpClient kelas dan mengirim email.

Potongan kode berikut menunjukkan cara mengirim email teks biasa.

//Create an instance of the MailMessage class
var message = new MailMessage();

// Set From field, To field and Plain text body
message.From = "sender@sender.com";
message.To.Add("receiver@receiver.com");
message.Body = "This is Plain Text Body";

// Create an instance of the SmtpClient class
var client = new SmtpClient();

// And Specify your mailing host server, Username, Password and Port
client.Host = "smtp.server.com";
client.Username = "Username";
client.Password = "Password";
client.Port = 25;

try
{
    //Client.Send will send this message
    client.Send(message);
    Console.WriteLine("Message sent");
}
catch (Exception ex)
{
    System.Diagnostics.Trace.WriteLine(ex.ToString());
}

Kirim Email dengan Body HTML

Contoh pemrograman di bawah ini menunjukkan cara Anda dapat mengirim pesan email HTML sederhana. HtmlBody, properti dari MailMessage kelas, digunakan untuk menentukan konten HTML dari isi pesan. Untuk mengirim email HTML sederhana, ikuti langkah-langkah berikut:

  • Buat sebuah instansi dari MailMessage kelas.
  • Tentukan alamat email pengirim dan penerima dalam MailMessage instance.
  • Tentukan HtmlBody konten.
  • Buat sebuah instansi dari SmtpClient kelas dan mengirim email menggunakan Kirim metode.

Untuk keperluan artikel ini, konten HTML email bersifat sederhana: This is the HTML body Kebanyakan email HTML akan lebih kompleks. Potongan kode berikut menunjukkan cara mengirim email dengan body HTML.

public static void Run()
{
    // Declare msg as MailMessage instance
    var msg = new MailMessage();

    // Use MailMessage properties like specify sender, recipient, message and HtmlBody
    msg.From = "newcustomeronnet@gmail.com";
    msg.To = "asposetest123@gmail.com";
    msg.Subject = "Test subject";
    msg.HtmlBody = "<html><body>This is the HTML body</body></html>";

    var client = GetSmtpClient();

    try
    {
        // Client will send this message
        client.Send(msg);
        Console.WriteLine("Message sent");
    }
    catch (Exception ex)
    {
        Trace.WriteLine(ex.ToString());
    }

    Console.WriteLine(Environment.NewLine + "Email sent with HTML body.");
}

private static SmtpClient GetSmtpClient()
{
    var client = new SmtpClient("smtp.gmail.com", 587, "your.email@gmail.com", "your.password");
    client.SecurityOptions = SecurityOptions.Auto;
    return client;
}

Kirim Email HTML dengan Teks Alternatif

Gunakan AlternateView kelas untuk menentukan salinan pesan email dalam format yang berbeda. Misalnya, jika Anda mengirim pesan dalam HTML, Anda mungkin juga ingin menyediakan versi teks biasa untuk penerima yang menggunakan pembaca email yang tidak dapat menampilkan konten HTML. Atau, jika Anda mengirim buletin, Anda mungkin ingin menyediakan salinan teks biasa untuk penerima yang memilih menerima versi teks biasa. Untuk mengirim email dengan teks alternatif, ikuti langkah-langkah berikut:

  1. Buat sebuah instansi dari MailMessage kelas.
  2. Tentukan alamat email pengirim dan penerima dalam MailMessage instance.
  3. Buat sebuah instansi dari AlternateView kelas.

Ini membuat tampilan alternatif untuk pesan email menggunakan konten yang ditentukan dalam string.

  1. Tambahkan instansi dari AlternateView kelas ke MailMessage objek.
  2. Buat sebuah instansi dari SmtpClient kelas dan mengirim email menggunakan Kirim metode.

Potongan kode berikut menunjukkan cara mengirim email dengan teks alternatif.

// Declare message as MailMessage instance
var message = new MailMessage();

// Creates AlternateView to view an email message using the content specified in the //string
var alternate = AlternateView.CreateAlternateViewFromString("Alternate Text");
            
// Adding alternate text
message.AlternateViews.Add(alternate);

Kirim Email Massal

Kita dapat mengirim sekumpulan email menggunakan SmtpClient kelas dari Kirim overload metode yang menerima sebuah MailMessageCollection:

  1. Buat sebuah instance dari SmtpClient kelas.
  2. Tentukan SmtpClient properti kelas.
  3. Buat sebuah instansi dari MailMessage kelas.
  4. Tentukan pengirim, penerima, subjek email, dan pesan dalam instansi dari MailMessage kelas.
  5. Ulangi dua langkah di atas lagi, jika Anda ingin mengirim email ke orang lain.
  6. Buat sebuah instance dari MailMessageCollection kelas.
  7. Tambahkan sebuah instansi dari MailMessage kelas dalam objek dari MailMessageCollection kelas.
  8. Sekarang kirim email Anda menggunakan SmtpClient kelas Kirim metode dengan melewatkan instansi dari MailMessageCollection kelas di dalamnya.

Potongan kode berikut menunjukkan cara mengirim email massal.

// Create SmtpClient as client and specify server, port, user name and password
var client = new SmtpClient("mail.server.com", 25, "Username", "Password");

// Create instances of MailMessage class and Specify To, From, Subject and Message
var message1 = new MailMessage("msg1@from.com", "msg1@to.com", "Subject1", "message1, how are you?");
var message2 = new MailMessage("msg1@from.com", "msg2@to.com", "Subject2", "message2, how are you?");
var message3 = new MailMessage("msg1@from.com", "msg3@to.com", "Subject3", "message3, how are you?");

// Create an instance of MailMessageCollection class
var manyMsg = new MailMessageCollection();
manyMsg.Add(message1);
manyMsg.Add(message2);
manyMsg.Add(message3);

try
{
    // Send Messages using Send method
    client.Send(manyMsg);                
    Console.WriteLine("Message sent");
}
catch (Exception ex)
{
    Trace.WriteLine(ex.ToString());
}

Lacak Keberhasilan Email Massal

Saat Anda mengirim pesan secara massal, Anda dapat memperoleh informasi tentang jumlah pesan yang berhasil dikirim dan bahkan mendapatkan daftar pesan tersebut. SucceededSending event untuk tujuan ini.

Contoh kode:

using (var client = new SmtpClient(host, SecurityOptions.Auto))
{
    int messageCount = 0;

    client.SucceededSending += (sender, eventArgs) =>
    {
        Console.WriteLine("The message '{0}' was successfully sent.", eventArgs.Message.Subject);
        messageCount++;
    };

    client.Send(messages);

    Console.WriteLine("{0} messages were successfully sent.", messageCount);
}

Kirim Email dengan MultiConnection

The UseMultiConnection properti dapat digunakan untuk membuat beberapa koneksi bagi operasi berat. Anda juga dapat mengatur jumlah koneksi yang akan digunakan selama mode multikoneksi dengan menggunakan SmtpClient.ConnectionsQuantity. Potongan kode berikut menunjukkan penggunaan mode multikoneksi untuk mengirim beberapa pesan.

var smtpClient = new SmtpClient();
smtpClient.Host = "<HOST>";
smtpClient.Username = "<USERNAME>";
smtpClient.Password = "<PASSWORD>";
smtpClient.Port = 587;
smtpClient.SupportedEncryption = EncryptionProtocols.Tls;
smtpClient.SecurityOptions = SecurityOptions.SSLExplicit;

var messages = new List<MailMessage>();
for (int i = 0; i < 20; i++)
{
    MailMessage message = new MailMessage(
        "<EMAIL ADDRESS>",
        "<EMAIL ADDRESS>",
        "Test Message - " + Guid.NewGuid().ToString(),
        "SMTP Send Messages with MultiConnection");
    messages.Add(message);
}

smtpClient.ConnectionsQuantity = 5;
smtpClient.UseMultiConnection = MultiConnectionMode.Enable;
smtpClient.Send(messages);

Kirim Pesan sebagai TNEF

Email TNEF memiliki format khusus yang mungkin hilang jika dikirim menggunakan API standar. SmtpClient kelas UseTnef properti dapat diatur untuk mengirim email sebagai TNEF. Potongan kode berikut menunjukkan cara mengirim pesan sebagai TNEF.

var emlFileName = RunExamples.GetDataDir_Email() + "Message.eml";     // A TNEF Email

// Load from eml
var eml1 = MailMessage.Load(emlFileName, new EmlLoadOptions());
eml1.From = "somename@gmail.com";
eml1.To.Clear();
eml1.To.Add(new MailAddress("first.last@test.com"));
eml1.Subject = "With PreserveTnef flag during loading";
eml1.Date = DateTime.Now;

var client = new SmtpClient("smtp.gmail.com", 587, "somename", "password");
client.SecurityOptions = SecurityOptions.Auto;
client.UseTnef = true;     // Use this flag to send as TNEF
client.Send(eml1);

Kirim Permintaan Pertemuan

Aspose.Email memungkinkan pengembang menambahkan fungsi kalender ke email Anda.

Kirim Permintaan melalui Email

Untuk mengirim permintaan pertemuan via email, ikuti langkah-langkah berikut:

  • Buat sebuah instansi dari MailMessage kelas.
  • Tentukan alamat pengirim dan penerima menggunakan sebuah instance dari MailMessage kelas.
  • Inisialisasi sebuah instance dari Appointment kelas dan berikan nilainya.
  • Tentukan ringkasan dan deskripsi dalam Calendar instance.
  • Tambahkan Calendar ke MailMessage instance dan meneruskannya Appointment instance.

|Permintaan pertemuan iCalendar yang dikirim via email| | :- | |todo:image_alt_text| Potongan kode berikut menunjukkan cara mengirim permintaan melalui Email.


// Create an instance of the MailMessage class
var msg = new MailMessage();

// Set the sender, recipient, who will receive the meeting request. Basically, the recipient is the same as the meeting attendees
msg.From = "newcustomeronnet@gmail.com";
msg.To = "person1@domain.com, person2@domain.com, person3@domain.com, asposetest123@gmail.com";

// Create Appointment instance
var app = new Appointment("Room 112", new DateTime(2015, 7, 17, 13, 0, 0), new DateTime(2015, 7, 17, 14, 0, 0), msg.From, msg.To);
app.Summary = "Release Meetting";
app.Description = "Discuss for the next release";

// Add appointment to the message and Create an instance of SmtpClient class
msg.AddAlternateView(app.RequestApointment());
var client = GetSmtpClient();

try
{
    // Client.Send will send this message
    client.Send(msg);
    Console.WriteLine("Message sent");
}
catch (Exception ex)
{
    Trace.WriteLine(ex.ToString());
}

Teruskan Pesan

Teruskan Pesan dengan Klien SMTP

Meneruskan email adalah praktik umum. Email yang diterima dapat diteruskan ke penerima tertentu. Teruskan metode dapat digunakan untuk meneruskan email yang diterima atau disimpan ke penerima yang diinginkan. Potongan kode berikut menunjukkan cara meneruskan email menggunakan Klien SMTP.

//Create an instance of SmtpClient class
var client = new SmtpClient();

// Specify your mailing host server, Username, Password, Port and SecurityOptions
client.Host = "mail.server.com";
client.Username = "username";
client.Password = "password";
client.Port = 587;
client.SecurityOptions = SecurityOptions.SSLExplicit;
var message = MailMessage.Load(dataDir + "Message.eml");
client.Forward("Recipient1@domain.com", "Recipient2@domain.com", message);

Teruskan Pesan tanpa MailMessage

API juga mendukung penerusan pesan EML tanpa harus memuatnya terlebih dahulu ke MailMessage. Ini berguna dalam kasus di mana sumber daya sistem terbatas dalam hal memori.


using (var client = new SmtpClient(host, smtpPort, username, password, SecurityOptions.Auto))
{
    using (var fs = File.OpenRead(@"test.eml"))
    {
        client.Forward(sender, recipients, fs);
    }
}

Teruskan Pesan secara Asinkron tanpa MailMessage

using (var client = new SmtpClient(host, smtpPort, username, password))
{
    using (var fs = File.OpenRead(@"test.eml"))
    {
        await client.ForwardAsync(sender, recipients, fs);
    }
}

Mail Merge

Cara Menggabungkan Email

Mail merge membantu Anda membuat dan mengirim sekumpulan pesan email serupa. Inti dari email tersebut sama, tetapi kontennya dapat dipersonalisasi. Biasanya, detail kontak penerima (nama depan, nama belakang, perusahaan, dll) digunakan untuk mempersonalisasi email.

|Ilustrasi cara kerja mail merge:| | :- | |todo:image_alt_text| Aspose.Email memungkinkan pengembang mengatur mail merge yang mencakup data dari berbagai sumber data.

Untuk melakukan mail merge dengan Aspose.Email, ikuti langkah-langkah berikut:

  1. Buat fungsi dengan tanda nama
  2. Buat sebuah instansi dari MailMessage kelas.
  3. Tentukan pengirim, penerima, subjek, dan isi.
  4. Buat tanda tangan untuk bagian akhir email.
  5. Buat sebuah instansi dari TemplateEngine kelas dan berikan kepadanya MailMessage instance.
  6. Ambil tanda tangan dalam TemplateEngine instance.
  7. Buat instance dari kelas DataTable.
  8. Tambahkan kolom Receipt, FirstName, dan LastName sebagai sumber data dalam kelas DataTable.
  9. Buat instance dari kelas DataRow.
  10. Tentukan alamat penerima, nama depan dan belakang dalam objek DataRow.
  11. Buat sebuah instansi dari MailMessageCollection kelas
  12. Tentukan TemplateEngine  dan instance DataTable dalam MailMessageCollection instance.
  13. Buat sebuah instansi dari SmtpClient kelas dan tentukan server, port, nama pengguna, dan kata sandi.
  14. Kirim email menggunakan SmtpClient kelas Kirim metode.

Dalam contoh di bawah, #FirstName# menunjukkan kolom DataTable, yang nilainya ditetapkan oleh pengguna. Potongan kode berikut menunjukkan cara melakukan Mail Merge.

public static void Run()
{
    // The path to the File directory.
    string dataDir = RunExamples.GetDataDir_SMTP();
    string dstEmail = dataDir + "EmbeddedImage.msg";

    // Create a new MailMessage instance
    MailMessage msg = new MailMessage();

    // Add subject and from address
    msg.Subject = "Hello, #FirstName#";
    msg.From = "sender@sender.com";

    // Add email address to send email also Add mesage field to HTML body
    msg.To.Add("your.email@gmail.com");
    msg.HtmlBody = "Your message here";
    msg.HtmlBody += "Thank you for your interest in <STRONG>Aspose.Email</STRONG>.";

    // Use GetSignment as the template routine, which will provide the same signature
    msg.HtmlBody += "<br><br>Have fun with it.<br><br>#GetSignature()#";

    // Create a new TemplateEngine with the MSG message,  Register GetSignature routine. It will be used in MSG.
    TemplateEngine engine = new TemplateEngine(msg);
    engine.RegisterRoutine("GetSignature", GetSignature);

    // Create an instance of DataTable and Fill a DataTable as data source
    DataTable dt = new DataTable();
    dt.Columns.Add("Receipt", typeof(string));
    dt.Columns.Add("FirstName", typeof(string));
    dt.Columns.Add("LastName", typeof(string));

    DataRow dr = dt.NewRow();
    dr["Receipt"] = "abc<asposetest123@gmail.com>";
    dr["FirstName"] = "a";
    dr["LastName"] = "bc";
    dt.Rows.Add(dr);
    dr = dt.NewRow();
    dr["Receipt"] = "John<email.2@gmail.com>";
    dr["FirstName"] = "John";
    dr["LastName"] = "Doe";
    dt.Rows.Add(dr);
    dr = dt.NewRow();
    dr["Receipt"] = "Third Recipient<email.3@gmail.com>";
    dr["FirstName"] = "Third";
    dr["LastName"] = "Recipient";
    dt.Rows.Add(dr);

    MailMessageCollection messages;
    try
    {
        // Create messages from the message and datasource.
        messages = engine.Instantiate(dt);

        // Create an instance of SmtpClient and specify server, port, username and password
        SmtpClient client = new SmtpClient("smtp.gmail.com", 587, "your.email@gmail.com", "your.password");
        client.SecurityOptions = SecurityOptions.Auto;

        // Send messages in bulk
        client.Send(messages);
    }
    catch (MailException ex)
    {
        Debug.WriteLine(ex.ToString());
    }

    catch (SmtpException ex)
    {
        Debug.WriteLine(ex.ToString());
    }

    Console.WriteLine(Environment.NewLine + "Message sent after performing mail merge.");
}

// Template routine to provide signature
static object GetSignature(object[] args)
{
    return "Aspose.Email Team<br>Aspose Ltd.<br>" + DateTime.Now.ToShortDateString();
}

Cara Melakukan Mail Merge Baris per Baris

Pengguna dapat menggabungkan baris data individual serta mendapatkan yang lengkap dan siap MailMessage objek. The TemplateEngine.Merge metode dapat digunakan untuk melakukan mail merge per baris.

// Create message from the data in current row.
message = engine.Merge(currentRow);

Kirim Mail Menggunakan DNS

Kadang mengirim email melalui server SMTP yang dikonfigurasi tidak memungkinkan untuk kebutuhan proyek. Dalam kasus seperti itu Anda dapat mengirim pesan langsung ke server mail penerima dengan mencari catatan MX (Mail Exchange) domain penerima.

Aspose.Email menyediakan DnsClient kelas untuk menyelesaikan catatan MX. Untuk setiap penerima, kode di bawah menyelesaikan server pertukaran surat untuk domain penerima dan mencoba mengirim pesan ke salah satunya menggunakan sebuah SmtpClient dikonfigurasi tanpa autentikasi (port 25). Potongan kode berikut menampilkan cara mengirim email menggunakan server mail domain penerima.

static void Main(string[] args)
{
    try
    {
        MailMessage msg = new MailMessage("add1@domain.com", "add1@domain.com", "test", "this is a test");
        msg.CC.Add(new MailAddress("add2@domain.com", "CC Display Name"));
        DnsSendMessage(msg);
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
    }
}

private static void DnsSendMessage(MailMessage msg)
{
    // Get all the recipients in To, CC and Bcc in one collection
    MailAddressCollection addresses = new MailAddressCollection();
    foreach (MailAddress to in msg.To)
    {
        addresses.Add(to);
    }

    foreach (MailAddress cc in msg.CC)
    {
        addresses.Add(cc);
    }

    foreach (MailAddress bcc in msg.Bcc)
    {
        addresses.Add(bcc);
    }

    // Send mail using DNS to each address
    foreach (MailAddress addr in addresses)
    {
        // Find mail exchange servers with the help of DnsClient
        DnsClient dnsClient = new DnsClient();
        Question mxQuestion = new Question(addr.Host, QueryType.MX);
        if (dnsClient.Resolve(mxQuestion))
        {
            // Try to send a message
            foreach (ResourceRecord record in dnsClient.ReceivedMessage.Answers)
            {
                MXResourceRecord cnRecord = record as MXResourceRecord;
                if (cnRecord != null)
                {
                    try
                    {
                        // Send message
                        SmtpClient client = new SmtpClient();
                        client.AuthenticationMethod = SmtpAuthentication.None;
                        client.Host = cnRecord.ExchangeName;
                        client.Port = 25;
                        client.Send(msg);
                        Console.WriteLine("Mail sent to " + addr.Address);
                    }
                    catch (SmtpException e)
                    {
                        Console.WriteLine(cnRecord.ExchangeName + ": " + e.Message + Environment.NewLine);
                        continue;
                    }
                }
            }
        }
    }
}

Menerima Notifikasi Pengiriman untuk Pesan Terkirim dan Gagal

Untuk mendapatkan notifikasi pengiriman untuk pesan yang berhasil dan yang gagal, gunakan pipa (|) operator untuk menggabungkan nilai-nilai dari DeliveryNotificationOptions enumerasi dan menetapkannya ke DeliveryNotificationOptions properti dari MailMessage kelas. Potongan kode berikut menampilkan cara menerima notifikasi untuk pesan yang berhasil dikirim maupun yang gagal.

// Create the message
MailMessage msg = new MailMessage();
msg.From = "sender@sender.com";
msg.To = "receiver@receiver.com";
msg.Subject = "the subject of the message";

// Set delivery notifications for success and failed messages and add the MIME headers
msg.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess | DeliveryNotificationOptions.OnFailure;
msg.Headers.Add("Read-Receipt-To", "sender@sender.com");
msg.Headers.Add("Disposition-Notification-To", "sender@sender.com");

// Send the message
SmtpClient client = new SmtpClient("host", "username", "password");
client.Send(msg);

Gunakan Dokumen Office sebagai Isi Pesan

Aspose.Email menangani protokol jaringan dan fitur Microsoft Outlook serta tidak dapat, dengan sendirinya, merender dokumen Word atau workbook Excel. Namun, dengan menggabungkan Aspose.Email dengan produk Aspose lainnya, Anda dapat mengonversi dokumen Office ke HTML atau MHTML dan menggunakan hasilnya sebagai isi email.

Gunakan Dokumen Microsoft Word sebagai Isi Pesan

Contoh ini menggunakan Aspose.Words untuk .NET untuk memuat dokumen Word dan mengonversinya ke format MHTML. Aspose.Email kemudian memuat MHTML ke dalam sebuah MailMessage objek, yang digunakan sebagai isi email dan dikirim melalui SMTP. Pemformatan HTML dan gambar dipertahankan seperti pada dokumen sumber asli ketika dilihat di Outlook atau klien email web.

  1. Muat dokumen Microsoft Word menggunakan Aspose.Words Document kelas.
  2. Simpan ke aliran dalam format MHTML.
  3. Muat aliran MHTML ke dalam sebuah MailMessage objek menggunakan MhtmlLoadOptions.
  4. Atur properti pesan lainnya.
  5. Kirim email menggunakan SmtpClient kelas.
// Load a Word document from disk and save it to stream as MHTML
Document wordDocument = new Document(folderPath + "invoice.docx");
MemoryStream mhtmlStream = new MemoryStream();
wordDocument.Save(mhtmlStream, SaveFormat.Mhtml);

// Load the MHTML in a MailMessage object
mhtmlStream.Position = 0;
using (MailMessage message = MailMessage.Load(mhtmlStream, new MhtmlLoadOptions()))
{
    message.Subject = "Sending Invoice by Email";
    message.From = "sender@gmail.com";
    message.To = "recipient@gmail.com";

    // Save the message in MSG format to disk
    message.Save(folderPath + "WordDocAsEmailBody_out.msg", SaveOptions.DefaultMsgUnicode);

    // Send the email message
    using (SmtpClient client = new SmtpClient("smtp.gmail.com", 587, "sender@gmail.com", "password"))
    {
        client.SecurityOptions = SecurityOptions.SSLExplicit;
        client.Send(message);
    }
}

Gunakan Lembar Kerja Microsoft Excel sebagai Isi Pesan

Contoh ini menggunakan Aspose.Cells untuk .NET untuk memuat workbook Excel dan mengonversinya menjadi aliran HTML. Aspose.Email kemudian menggunakan HTML tersebut sebagai isi sebuah MailMessage dan mengirimkannya melalui SMTP.

  1. Muat workbook Microsoft Excel menggunakan Aspose.Cells Workbook kelas.
  2. Simpan workbook yang dimuat ke sebuah MemoryStream dalam format HTML.
  3. Baca HTML dari aliran sebagai string.
  4. Buat baru MailMessage objek dan mengatur HtmlBody ke konten HTML.
  5. Kirim email menggunakan SmtpClient kelas.
// Load the desired workbook from disk
Workbook workbook = new Workbook(dataDir + "Data.xlsx");

// Save the workbook to a memory stream in HTML format
MemoryStream ms = new MemoryStream();
workbook.Save(ms, SaveFormat.Html);
ms.Position = 0;

// Define a StreamReader object with the above MemoryStream
StreamReader sr = new StreamReader(ms);

// Load the saved HTML from StreamReader into a string variable
string strHtmlBody = sr.ReadToEnd();

// Define a new MailMessage object and set its HtmlBody
MailMessage message = new MailMessage();
message.HtmlBody = strHtmlBody;
message.Subject = "Inline Excel Message";
message.From = "sender@abc.com";
message.To = "receiver@xyz.com";
message.IsBodyHtml = true;

SmtpClient client = new SmtpClient();
client.Host = "smtp.gmail.com";
client.Username = "Username";
client.Password = "Password";
client.Port = 587;
client.SecurityOptions = SecurityOptions.Auto;
client.Send(message);