c# 使用 1 个连接在线程中发送电子邮件
c# Sending emails in threads using 1 connection
我有一个程序可以将我的简历发送到 post 找工作的人的电子邮件中,如果他们在 post 中包含他们的电子邮件。
所以我发送了一封电子邮件,其中包含他们对职位描述的引用、生成日期等,
所以每封电子邮件都是独一无二的,但是每封电子邮件都上传相同的文件 (resume.pdf) 作为附件。
现在每次发送电子邮件时我都需要上传相同的文件 (resume.pdf) // 我的简历
所以这是我的问题:
我可以发送每封电子邮件并只上传我的 pdf 简历一次吗?
现在我使用这样的 smtp 客户端库:
GMailSmtp gmail = new GMailSmtp(new NetworkCredential("username", "password"));
所以每次我发送电子邮件时,我都会创建一个线程来打开一个新连接,这对我来说似乎很耗时。
我想知道是否有 API 或库来创建 1 个连接,然后通过队列发送我想要的所有电子邮件,或者创建一个新线程来发送电子邮件。
是的。如果您使用 Gmail 等第三方服务器,则需要在每封电子邮件中上传您的简历。但是,有很多简单的方法可以在后台执行此操作。
试一试,如果您有具体的疑问或问题,post您的代码和您的具体问题:
List<string> recipients = new List<string>();
BackgroundWorker emailer = new BackgroundWorker();
public void startSending()
{
emailer.DoWork += sendEmails;
emailer.RunWorkerAsync();
}
private void sendEmails(object sender, DoWorkEventArgs e)
{
string attachmentPath = @"path to your PDF";
string subject = "Give me a JOB!";
string bodyHTML = "html or plain text = up to you";
foreach (string recipient in recipients)
{
sendEmail(recipient, subject,bodyHTML,attachmentPath);
}
}
private void sendEmail(string recipientAddress, string subject, string bodyHTML,string pathToAttachmentFile)
{
MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
mail.From = new MailAddress("your_email_address@gmail.com");
mail.To.Add(recipientAddress);
mail.Subject = subject;
mail.Body = bodyHTML;
System.Net.Mail.Attachment attachment;
attachment = new System.Net.Mail.Attachment(pathToAttachmentFile);
mail.Attachments.Add(attachment);
SmtpServer.Port = 587;
SmtpServer.Credentials = new System.Net.NetworkCredential("username", "password");
SmtpServer.EnableSsl = true;
SmtpServer.Send(mail);
}
请注意,BackgroundWorker 需要引用 System.ComponentModel。
您可以使用单独的线程来发送电子邮件。例如,您可以按照 Shannon Holsinger 的建议进行操作。您还可以将简历上传到 Dropbox 或其他任何地方,然后发送 link 而不是附加文件。
我有一个程序可以将我的简历发送到 post 找工作的人的电子邮件中,如果他们在 post 中包含他们的电子邮件。
所以我发送了一封电子邮件,其中包含他们对职位描述的引用、生成日期等,
所以每封电子邮件都是独一无二的,但是每封电子邮件都上传相同的文件 (resume.pdf) 作为附件。
现在每次发送电子邮件时我都需要上传相同的文件 (resume.pdf) // 我的简历
所以这是我的问题:
我可以发送每封电子邮件并只上传我的 pdf 简历一次吗?
现在我使用这样的 smtp 客户端库:
GMailSmtp gmail = new GMailSmtp(new NetworkCredential("username", "password"));
所以每次我发送电子邮件时,我都会创建一个线程来打开一个新连接,这对我来说似乎很耗时。
我想知道是否有 API 或库来创建 1 个连接,然后通过队列发送我想要的所有电子邮件,或者创建一个新线程来发送电子邮件。
是的。如果您使用 Gmail 等第三方服务器,则需要在每封电子邮件中上传您的简历。但是,有很多简单的方法可以在后台执行此操作。
试一试,如果您有具体的疑问或问题,post您的代码和您的具体问题:
List<string> recipients = new List<string>();
BackgroundWorker emailer = new BackgroundWorker();
public void startSending()
{
emailer.DoWork += sendEmails;
emailer.RunWorkerAsync();
}
private void sendEmails(object sender, DoWorkEventArgs e)
{
string attachmentPath = @"path to your PDF";
string subject = "Give me a JOB!";
string bodyHTML = "html or plain text = up to you";
foreach (string recipient in recipients)
{
sendEmail(recipient, subject,bodyHTML,attachmentPath);
}
}
private void sendEmail(string recipientAddress, string subject, string bodyHTML,string pathToAttachmentFile)
{
MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
mail.From = new MailAddress("your_email_address@gmail.com");
mail.To.Add(recipientAddress);
mail.Subject = subject;
mail.Body = bodyHTML;
System.Net.Mail.Attachment attachment;
attachment = new System.Net.Mail.Attachment(pathToAttachmentFile);
mail.Attachments.Add(attachment);
SmtpServer.Port = 587;
SmtpServer.Credentials = new System.Net.NetworkCredential("username", "password");
SmtpServer.EnableSsl = true;
SmtpServer.Send(mail);
}
请注意,BackgroundWorker 需要引用 System.ComponentModel。
您可以使用单独的线程来发送电子邮件。例如,您可以按照 Shannon Holsinger 的建议进行操作。您还可以将简历上传到 Dropbox 或其他任何地方,然后发送 link 而不是附加文件。