-6

我正在尝试一次向一百多人发送带有附件的电子邮件,并且我发现非常好的源代码可以完美地与附件一起使用,但不能一次向多个人发送邮件。

所以现在我的问题是:你能帮我修改现有代码以使其工作吗?

编程语言:C#

这是代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Mail;

namespace ConsoleApplication3
{

    public class GmailAccount
    {
        public string Username;
        public string Password;
        public string DisplayName;

        public string Address
        {
            get
            {
                return Username + "@gmail.com";
            }
        }

        private SmtpClient client;

        public GmailAccount(string username, string password, string displayName = null)
        {
            Username = username;
            Password = password;
            DisplayName = displayName;

            client = new SmtpClient
            {
                Host = "smtp.gmail.com",
                Port = 587,
                EnableSsl = true,
                DeliveryMethod = SmtpDeliveryMethod.Network,
                UseDefaultCredentials = false,
                Credentials = new NetworkCredential(Address, password)
            };
        }

        public void SendMessage(string targetAddress, string subject, string body, params string[] files)
        {
            MailMessage message = new MailMessage(new MailAddress(Address, DisplayName), new MailAddress(targetAddress))
            {
                Subject = subject,
                Body = body
            };

            foreach (string file in files)
            {
                Attachment attachment = new Attachment(file);
                message.Attachments.Add(attachment);
            }

            client.Send(message);
        }
    }

    class Program
    {   
        static void Main(string[] args)
        {
            GmailAccount acc = new GmailAccount("username", "password", "Caption");
            acc.SendMessage("some.person@gmail.com", "Hello World!", "like in the title...", "C:\\temp.rar");
        }
    }
    }
4

2 回答 2

1

我认为这就是你要找的:

message.To.Add(new MailAddress("test@gmail.com");
于 2012-05-09T13:27:39.443 回答
0

在 SendMessage 的 targetAddress 参数中传递更多用逗号分隔的值。

向多人发送邮件的示例代码:

public bool SendEmail()
{
    bool status = false;

        try
        {
            //code to send email
            this._mail = new MailMessage();

            this._mail.From = new MailAddress(this.From, this.DisplayName);

            if (!string.IsNullOrEmpty(this.To))
            {
                var distinctAddress = new List<string>(this.To.Split(',').Distinct());
                this.To = string.Empty;

                foreach (string address in distinctAddress) // Loop through all strings
                {
                    this.To += address + ","; // Append string to StringBuilder
                }
                this.To = this.To.TrimEnd(',');
                this._mail.To.Add(this.To);
            }

            if (!string.IsNullOrEmpty(this.CC))
                this._mail.CC.Add(this.CC);

            if (!string.IsNullOrEmpty(this.BCC))
                this._mail.Bcc.Add(this.BCC);

            this._mail.Subject = this.Subject;

            this._mail.IsBodyHtml = this.IsBodyHtml;

            this._mail.Body = this.Body;

            if (this.Priority == true)
            {
                this._mail.Priority = MailPriority.High;
            }

            this._mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;

            if (this._attachments != null && this._attachments.Count > 0)
            {
                foreach (string file in this._attachments)
                {
                    Attachment attachment = new Attachment(file);
                    this._mail.Attachments.Add(attachment);
                }
            }

            this._smtpServer = new SmtpClient(this.EmailServer);
            this._smtpServer.EnableSsl = this.EnableSsl;
            this._smtpServer.Port = this.Port;
            this._smtpServer.Credentials = new System.Net.NetworkCredential(this.UserId, this.Password);

            if (String.IsNullOrEmpty(this.To) != true || string.IsNullOrEmpty(this.CC) != true || string.IsNullOrEmpty(this.BCC) != true)
                this._smtpServer.Send(this._mail);
            status = true;
        }
        catch (Exception ex)
        {
        }
    return status;
}
于 2012-05-09T13:29:42.633 回答