استفاده از کلاینت SMTP برای ارسال ایمیل‌ها، انتقال پیام‌ها و انجام Mail Merge در C#

ارسال ایمیل‌ها

ارسال ایمیل‌ها با کلاس SmtpClient

این SmtpClient کلاس امکان ارسال ایمیل‌ها از طریق پروتکل ساده انتقال ایمیل (SMTP) را برای برنامه‌ها فراهم می‌کند.

یکی از ویژگی‌های کلیدی آن توانایی ارسال پیام‌ها به‌صورت انبوه.

همچنین به‌طور کامل پشتیبانی می‌کند از همزمان و ناهمزمان مدل‌های برنامه‌نویسی. برای انتقال ایمیل به‌گونه‌ای که رشته اصلی تا تکمیل عملیات مسدود بماند، توسعه‌دهندگان می‌توانند از یکی از ارسال متدها. به عنوان گزینه‌ای دیگر، برای اجازه به رشته اصلی برای ادامه اجرا در حالی که ایمیل ارسال می‌شود، توسعه‌دهندگان می‌توانند از SendAsync متد.

علاوه بر این، SmtpClient پشتیبانی می‌کند از ارسال پیام‌ها در فرمت محصورسازی خنثی حمل‌ونقل (TNEF).

ارسال ایمیل‌ها به‌صورت همزمان

یک پیام ایمیل می‌تواند به‌صورت همزمان با استفاده از ارسال متد از SmtpClient کلاس. پیام ایمیل مشخص‌شده را از طریق سرور SMTP برای تحویل ارسال می‌کند. برای ارسال پیام ایمیل به صورت همزمان، مراحل زیر را دنبال کنید:

  1. یک نمونه از MailMessage کلاس و ویژگی‌های آن را تنظیم کنید.
  2. یک نمونه از SmtpClient کلاس و میزبان، پورت، نام کاربری و رمز عبور را مشخص کنید.
  3. ارسال پیام با استفاده از ارسال متد از SmtpClient کلاس و پاس دهید MailMessage نمونه.

قطعه کد زیر در C# نشان می‌دهد چگونه ایمیل‌های Outlook را به صورت همزمان ارسال کنید.

// 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());
}

ارسال ایمیل‌ها به صورت ناهمزمان

گاهی ممکن است بخواهید ایمیل را به صورت ناهمزمان ارسال کنید تا برنامه بتواند عملیات دیگر را در حالی که ایمیل در پس‌زمینه ارسال می‌شود، ادامه دهد. از .NET Framework 4.5، می‌توانید از متدهای ناهمزمان پیاده‌سازی‌شده بر اساس TAP مدل. قطعه کد زیر در C# نشان می‌دهد چگونه پیام‌های ایمیل Outlook را با استفاده از روش‌های الگوی ناهمزمان مبتنی بر تس(Task) ارسال کنیم:

  • SendAsync پیام‌های مشخص‌شده را ارسال می‌کند.

  • IAsyncSmtpClient - به برنامه‌ها اجازه می‌دهد تا با استفاده از پروتکل SMTP (Simple Mail Transfer Protocol) پیام ارسال کنند.

  • SmtpClient.CreateAsync - یک نمونه جدید از کلاس Aspose.Email.Clients.Smtp.SmtpClient ایجاد می‌کند.

  • SmtpSend - مجموعه پارامترهای متد Aspose.Email.Clients.Smtp.IAsyncSmtpClient.SendAsync(Aspose.Email.Clients.Smtp.Models.SmtpSend).

  • SmtpForward - آرگومان‌های 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()
    {

    }
}

ارسال پیام‌ها از دیسک

فایل‌های EML شامل هدر، بدنه پیام و پیوست‌ها هستند. Aspose.Email به توسعه‌دهندگان امکان کار با فایل‌های EML را به روش‌های مختلف می‌دهد. این بخش نشان می‌دهد چگونه فایل‌های EML را از دیسک بارگذاری کرده و به عنوان ایمیل با SMTP ارسال کنیم. می‌توانید فایل‌های .eml را از دیسک یا جریان به داخل MailMessage کلاس و پیام ایمیل را با استفاده از SmtpClient کلاس. MailMessage کلاس اصلی برای ایجاد پیام‌های ایمیلی جدید، بارگذاری فایل‌های پیام ایمیل از دیسک یا جریان و ذخیره‌سازی پیام‌ها است. قطعه کد زیر در C# نشان می‌دهد چگونه پیام‌های ذخیره‌شده را از دیسک ارسال کنید.

// 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);
}            

ارسال ایمیل‌ها به صورت متن ساده

این بدنه ویژگی، یک ویژگی از MailMessage کلاس، برای مشخص کردن محتوای متن ساده بدنه پیام استفاده می‌شود. برای ارسال یک پیام ایمیل متن ساده، این مراحل را دنبال کنید:

  • یک نمونه از MailMessage کلاس.
  • آدرس ایمیل فرستنده و گیرنده را در MailMessage نمونه.
  • مشخص کنید بدنه محتوا، برای پیام متن ساده استفاده می‌شود.
  • یک نمونه از SmtpClient کلاس و ایمیل را ارسال کنید.

قطعه کد زیر نشان می‌دهد چگونه یک ایمیل متن ساده ارسال کنید.

//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());
}

ارسال ایمیل‌ها با بدنه HTML

نمونه‌های برنامه‌نویسی زیر نشان می‌دهند چگونه می‌توانید یک پیام ایمیل ساده HTML ارسال کنید. این HtmlBody، یک ویژگی از MailMessage کلاس، برای مشخص کردن محتوای HTML بدنه پیام استفاده می‌شود. برای ارسال یک ایمیل ساده HTML، این مراحل را دنبال کنید:

  • یک نمونه از MailMessage کلاس.
  • آدرس ایمیل فرستنده و گیرنده را در MailMessage نمونه.
  • مشخص کنید HtmlBody محتوا.
  • یک نمونه از SmtpClient کلاس و ایمیل را با استفاده از ارسال متد.

برای هدف این مقاله، محتوای HTML ایمیل به صورت ساده است: This is the HTML body اکثر ایمیل‌های HTML پیچیده‌تر خواهند بود. قطعه کد زیر نشان می‌دهد چگونه ایمیلی با بدنه 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;
}

ارسال ایمیل‌های HTML با متن جایگزین

از AlternateView کلاس برای مشخص کردن نسخه‌های یک پیام ایمیل در قالب‌های مختلف. برای مثال، اگر پیام را به صورت HTML ارسال کنید، ممکن است بخواهید نسخه متن ساده نیز برای دریافت‌کنندگانی که ایمیل‌خوان‌هایی دارند که نمی‌توانند محتوای HTML را نمایش دهند، ارائه کنید. یا اگر خبرنامه‌ای می‌فرستید، ممکن است بخواهید یک نسخه متن ساده از متن برای دریافت‌کنندگانی که نسخه متن ساده را انتخاب کرده‌اند، فراهم کنید. برای ارسال ایمیل با متن جایگزین، این مراحل را دنبال کنید:

  1. یک نمونه از MailMessage کلاس.
  2. آدرس ایمیل فرستنده و گیرنده را در MailMessage نمونه.
  3. یک نمونه از AlternateView کلاس.

این یک نمای جایگزین برای پیام ایمیل ایجاد می‌کند با استفاده از محتوای مشخص شده در رشته.

  1. نمونه‌ای از AlternateView کلاس به MailMessage شیء.
  2. یک نمونه از SmtpClient کلاس و ایمیل را با استفاده از ارسال متد.

قطعه کد زیر نشان می‌دهد چگونه ایمیلی با متن جایگزین ارسال کنید.

// 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);

ارسال ایمیل‌های انبوه

ما می‌توانیم یک دسته ایمیل را با استفاده از SmtpClient کلاس ارسال بارگذاری بیش از حد متد که یک MailMessageCollection:

  1. یک نمونه از SmtpClient کلاس.
  2. مشخص کنید SmtpClient ویژگی‌های کلاس را مشخص کنید.
  3. یک نمونه از MailMessage کلاس.
  4. فرستنده، گیرنده، موضوع ایمیل و پیام را در نمونه MailMessage کلاس.
  5. دو مرحله بالا را دوباره تکرار کنید، اگر می‌خواهید ایمیل را به شخص دیگری ارسال کنید.
  6. یک نمونه از MailMessageCollection کلاس.
  7. یک نمونه از MailMessage کلاس در شیء MailMessageCollection کلاس.
  8. اکنون ایمیل خود را با استفاده از SmtpClient کلاس ارسال متد با عبور نمونه از MailMessageCollection کلاس در آن.

قطعه کد زیر نشان می‌دهد چگونه ایمیل‌های انبوه ارسال کنید.

// 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());
}

پیگیری موفقیت ایمیل‌های انبوه

هنگامی که پیام‌ها را به صورت انبوه ارسال می‌کنید، می‌توانید اطلاعاتی درباره تعداد پیام‌های موفقیت‌آمیز ارسال شده دریافت کنید و حتی فهرستی از این پیام‌ها به دست آورید. SucceededSending رویداد برای این منظور است.

نمونه کد:

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);
}

ارسال ایمیل‌ها با MultiConnection

این UseMultiConnection ویژگی می‌تواند برای ایجاد چندین اتصال برای عملیات سنگین استفاده شود. همچنین می‌توانید تعداد اتصال‌های مورد استفاده در حالت چنداتصال را با استفاده از تنظیم کنید. SmtpClient.ConnectionsQuantity. قطعه کد زیر استفاده از حالت چنداتصال را برای ارسال چندین پیام نشان می‌دهد.

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);

ارسال پیام‌ها به صورت TNEF

ایمیل‌های TNEF دارای قالب‌بندی خاصی هستند که ممکن است در صورت ارسال با API استاندارد از دست بروند. SmtpClient کلاس UseTnef می‌توان ویژگی را تنظیم کرد تا ایمیل به‌صورت TNEF ارسال شود. قطعه کد زیر نشان می‌دهد چگونه پیامی را به‌صورت 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);

ارسال درخواست‌های جلسه

Aspose.Email به توسعه‌دهندگان امکان افزودن توابع تقویم به ایمیل‌های شما را می‌دهد.

ارسال درخواست‌ها از طریق ایمیل

برای ارسال درخواست‌های جلسه از طریق ایمیل، این مراحل را دنبال کنید:

  • یک نمونه از MailMessage کلاس.
  • آدرس‌های فرستنده و گیرنده را با استفاده از یک نمونه از MailMessage کلاس.
  • یک نمونه از را مقداردهی اولیه کنید Appointment کلاس و مقادیر آن را پاس دهید.
  • خلاصه و توصیف را در Calendar نمونه.
  • افزودن Calendar به MailMessage نمونه و پاس دهید آن را Appointment نمونه.

|درخواست جلسه iCalendar ارسال شده توسط ایمیل| | :- | |todo:image_alt_text| قطعه کد زیر نشان می‌دهد چگونه درخواست‌ها را از طریق ایمیل ارسال کنید.


// 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());
}

ارسال پیام‌ها

ارسال پیام‌ها با کلاینت SMTP

ارسال مجدد ایمیل یک عمل رایج است. ایمیل دریافت‌شده می‌تواند به گیرندگان خاصی ارسال شود. ارسال مجدد متد می‌تواند برای ارسال مجدد یک ایمیل دریافت‌شده یا ذخیره‌شده به گیرندگان موردنظر استفاده شود. قطعه کد زیر نشان می‌دهد چگونه ایمیل را با کلاینت 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);

ارسال پیام‌ها بدون MailMessage

API همچنین پشتیبانی می‌کند از ارسال مجدد پیام‌های EML بدون اینکه ابتدا بارگذاری شوند در MailMessage. این در مواردی مفید است که منابع محدود هستند، به‌خصوص حافظه سیستم.


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

ارسال پیام‌ها به‌صورت ناهمزمان بدون 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)

چگونه ایمیل‌ها را ادغام کنیم

ادغام نامه به شما کمک می‌کند یک دسته از پیام‌های ایمیل مشابه را ایجاد و ارسال کنید. محتوای اصلی ایمیل‌ها یکسان است، اما محتوا می‌تواند شخصی‌سازی شود. معمولاً جزئیات تماس گیرنده (نام، نام خانوادگی، شرکت و غیره) برای شخصی‌سازی ایمیل استفاده می‌شود.

|نمونه‌ای از نحوه کار ترکیب ایمیل:| | :- | |todo:image_alt_text| Aspose.Email به توسعه‌دهندگان اجازه می‌دهد ترکیب‌های ایمیل را که شامل داده از منابع مختلف هستند تنظیم کنند.

برای انجام ادغام نامه با Aspose.Email، مراحل زیر را انجام دهید:

  1. یک تابع با امضای نام ایجاد کنید
  2. یک نمونه از MailMessage کلاس.
  3. فرستنده، گیرنده، موضوع و بدنه را مشخص کنید.
  4. یک امضا برای انتهای ایمیل ایجاد کنید.
  5. یک نمونه از TemplateEngine کلاس بگیرید و به آن MailMessage نمونه.
  6. امضای را در TemplateEngine نمونه.
  7. یک نمونه از کلاس DataTable ایجاد کنید.
  8. ستون‌های Receipt، FirstName و LastName را به عنوان منبع داده در کلاس DataTable اضافه کنید.
  9. یک نمونه از کلاس DataRow ایجاد کنید.
  10. آدرس دریافت، نام و نام خانوادگی را در شیء DataRow مشخص کنید.
  11. یک نمونه از MailMessageCollection کلاس
  12. مشخص کنید TemplateEngine  و نمونه‌های DataTable در MailMessageCollection نمونه.
  13. یک نمونه از SmtpClient کلاس و سرور، پورت، نام کاربری و رمز عبور را مشخص کنید.
  14. ارسال ایمیل‌ها با استفاده از SmtpClient کلاس ارسال متد.

در نمونه زیر، #FirstName# نمایانگر یک ستون DataTable است که مقدار آن توسط کاربر تنظیم می‌شود. قطعه کد زیر نشان می‌دهد چگونه 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();
}

چگونه ادغام ایمیل سطر به سطر انجام شود

کاربر می‌تواند ردیف دادهٔ فردی را ادغام کند و همچنین یک مجموعهٔ کامل و آماده دریافت کند. MailMessage شیء. این TemplateEngine.Merge متد می‌تواند برای انجام ترکیب ایمیل به‌صورت سطری استفاده شود.

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

ارسال ایمیل با استفاده از DNS

گاهی ارسال ایمیل‌ها از طریق سرور SMTP پیکربندی‌شده برای نیازهای پروژه مناسب نیست. در چنین مواردی می‌توانید پیام را به‌صورت مستقیم به سرورهای ایمیل گیرنده تحویل دهید با جستجوی رکوردهای MX (Mail Exchange) دامنه گیرنده.

Aspose.Email ارائه می‌دهد DnsClient کلاس برای حل رکوردهای MX. برای هر گیرنده، کد زیر سرورهای مبدل ایمیل دامنه گیرنده را حل می‌کند و سعی می‌کند پیام را به یکی از آن‌ها با استفاده از یک SmtpClient بدون احراز هویت (پورت ۲۵) پیکربندی شده است. قطعه کد زیر نشان می‌دهد چگونه ایمیل‌ها را با استفاده از سرورهای ایمیل دامنه گیرنده ارسال کنید.

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;
                    }
                }
            }
        }
    }
}

دریافت اعلان‌های تحویل برای پیام‌های ارسالی و ناموفق

برای دریافت اعلان تحویل برای پیام‌های ارسالی موفق و ناموفق، از عملگر pipe (|) برای ترکیب مقادیر DeliveryNotificationOptions enumeration و به DeliveryNotificationOptions ویژگی MailMessage کلاس. قطعه کد زیر نشان می‌دهد چگونه اعلان‌ها را برای پیام‌های ارسالی موفق و ناموفق دریافت کنید.

// 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);

استفاده از یک سند Office به‌عنوان بدنهٔ پیام

Aspose.Email با پروتکل‌های شبکه و ویژگی‌های Microsoft Outlook سروکار دارد و به‌تنهایی نمی‌تواند اسناد Word یا Workbook‌های Excel را رندر کند. اما با ترکیب Aspose.Email با محصولات دیگر Aspose، می‌توانید یک سند Office را به HTML یا MHTML تبدیل کنید و از نتیجه به‌عنوان بدنهٔ ایمیل استفاده کنید.

استفاده از یک سند Microsoft Word به‌عنوان بدنهٔ پیام

این مثال از Aspose.Words برای .NET برای بارگذاری یک سند Word و تبدیل آن به فرمت MHTML. سپس Aspose.Email MHTML را به یک MailMessage شیء که به‌عنوان بدنهٔ ایمیل استفاده می‌شود و از طریق SMTP ارسال می‌شود. قالب‌بندی HTML و تصاویر همانند سند منبع اصلی هنگام مشاهده در Outlook یا یک کلاینت وب ایمیل حفظ می‌شوند.

  1. یک سند Microsoft Word را با استفاده از Aspose.Words بارگذاری کنید Document کلاس.
  2. آن را به یک جریان در فرمت MHTML ذخیره کنید.
  3. جریان MHTML را به یک MailMessage شیء با استفاده از MhtmlLoadOptions.
  4. سایر ویژگی‌های پیام را تنظیم کنید.
  5. ارسال ایمیل با استفاده از SmtpClient کلاس.
// 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);
    }
}

استفاده از یک برگه Microsoft Excel به‌عنوان بدنهٔ پیام

این مثال از Aspose.Cells برای .NET برای بارگذاری یک Workbook Excel و تبدیل آن به یک جریان HTML. سپس Aspose.Email از HTML به‌عنوان بدنهٔ یک MailMessage و آن را از طریق SMTP ارسال می‌کند.

  1. یک Workbook Microsoft Excel را با استفاده از Aspose.Cells بارگذاری کنید Workbook کلاس.
  2. Workbook بارگذاری‌شده را به یک MemoryStream به فرمت HTML.
  3. HTML را از جریان به‌عنوان رشته بخوانید.
  4. ایجاد یک MailMessage شیء و تنظیم HtmlBody به محتوای HTML.
  5. ارسال ایمیل با استفاده از SmtpClient کلاس.
// 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);