我有一个通过SMTP发送电子邮件的应用程序,但它比罪恶慢。两个收件人可能需要20多秒。我认为问题在于程序逻辑。
程序打开一个带有电子邮件地址和显示名称的csv,然后使用for循环向每个收件人发送消息。
问题是,我担心每次发送给列表中的下一个人时都会重新建立SMTP连接。
我的问题是,如何为每个用户设置SMTP连接并重用该连接? (除非这不是为什么它的速度慢,有人可以告诉我为什么它的运行速度这么慢)
void DoWork(object sender, DoWorkEventArgs e)
{
// Get User List
List<string[]> mycsv = csvRead();
int total = mycsv.Count;
// Send Message to each user
for (int x = 0; x < total; x++)
{
//Actual send message
sendMail(mycsv[x][0], mycsv[x][1]);
}
}
private void sendMail(string toEmail, string toName)
{
string email = Properties.SMTP.Default.Email;
string name = Properties.SMTP.Default.DisplayName;
MailMessage mail = new MailMessage();
mail.From = new MailAddress(email, name);
//Recipient Address
mail.To.Add(new MailAddress(toEmail, toName));
//Formatted mail
mail.IsBodyHtml = true;
// htmlMessage and Subject are global
mail.Body = htmlMessage;
mail.Subject = htmlSubject;
SmtpClient smtp = smtpDetails();
smtp.Send(mail);
}
private SmtpClient smtpDetails()
{
int port = Convert.ToInt32(Properties.SMTP.Default.ServerPort);
string email = Properties.SMTP.Default.Email;
string username = Properties.SMTP.Default.Username;
string password = Properties.SMTP.Default.Password;
string host = Properties.SMTP.Default.ServerAdd;
SmtpClient smtp = new SmtpClient();
smtp.Port = port;
smtp.EnableSsl = true;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.UseDefaultCredentials = false;
smtp.Credentials = new System.Net.NetworkCredential(username, password);
smtp.Host = host;
return smtp;
}
VS:2013 - 4.5 .net - WPF app
答案 0 :(得分:0)
提高速度的一种方法是为邮件传递创建一个静态类。例如。一个带有静态方法SendMail的邮件处理程序类(将smtpDetails()放入其中)。 因此,不需要为循环中的每个调用创建SmtpClient的新实例 - 只需重用静态方法。
答案 1 :(得分:0)
你也可以使用:
using(SmtpClient smtp = new SmtpClient())
{
Port = port
//etc
}
这将处理所有smtp连接。