gpt4 book ai didi

c# - 如何从 Windows 服务发送电子邮件?

转载 作者:太空狗 更新时间:2023-10-29 20:29:25 26 4
gpt4 key购买 nike

我需要按计划发送大量电子邮件(可能每天数百封)。我想这样做的方式如下,但问题是我的 Body 字段会变得非常大,如果我将它添加为字符串,它会变得很难看。

SmtpClient client = new SmtpClient(); //host and port picked from web.config
client.EnableSsl = true;

MailMessage message = new MailMessage();

message.Body = "test from winservice"; // HERE IS MY PROBLEM
message.IsBodyHtml = true;
message.From = new MailAddress("donotreply@abcde.com");
message.Subject = "My subject";
message.To.Add(new MailAddress("piniusha@abcde.com"));
try
{
client.Send(message);
}
catch (Exception)
{

}

当我必须从 aspx 页面执行此操作时,我使用了:

MailDefinition message = new MailDefinition();  

message.BodyFileName = @"~\EmailTemplate\Template1.htm";
ListDictionary replacements = new ListDictionary();
replacements.Add("<% Name %>", this.txtName.Text);
replacements.Add("<% PhoneOrEmail %>", this.txtPhoneOrEmail.Text);
replacements.Add("<% Message %>", this.txtMessage.Text);
MailMessage msgHtml = message.CreateMailMessage(RECIPIENTS, replacements, new LiteralControl());

我认为这是一个优雅的解决方案,但我不想引用 System.Web.UI.WebControls.MailDefinition ,因为我在 Winservice 中。

  1. 如何从 Winservice 发送批量电子邮件?
  2. 是否可以从 Gmail 帐户发送电子邮件?或者他们会在一段时间后阻止我?

最佳答案

为什么您不使用与 MailDefinition 使用的完全相同的概念?从模板文件加载正文,用另一个列表中的文本替换一些标记 - 邮件合并样式?

您所做的只是对要与模板合并的信息数据集进行 foreach。加载合并数据,遍历合并数据,用当前合并记录替换模板中的标记。将消息正文设置为当前构建的消息。将消息附加到消息队列或立即发送,任您选择。

这不是火箭科学。您已经有了创建消息的代码,所以这只是加载合并数据并循环遍历它的一个例子。我已经简化以演示这个概念,并且我对合并数据使用了 CSV,并假设没有字段包含任何逗号:

message.IsBodyHtml = true;
message.From = new MailAddress("MailSender@MyCompany.com");
message.Subject = "My bogus email subject";

string[] lines = File.ReadAllLines(@"~\MergeData.csv");
string originalTemplate = File.ReadAllText(@"~\Template.htm");

foreach(string line in lines)
{
/* Split out the merge data */
string[] mergeData = line.Split(',');

/* Reset the template - to revert changes made in previous loop */
string currentTemplate = originalTemplate;

/* Replace the merge tokens with actual data */
currentTemplate = currentTemplate.Replace("[[FullNameToken]]", mergeData[0]);
currentTemplate = currentTemplate.Replace("[[FirstNameToken]]", mergeData[1]);
currentTemplate = currentTemplate.Replace("[[OtherToken]]", mergeData[2]);

/*... other token replacements as necessary.
* tokens can be specified as necessary using whatever syntax you choose
* just make sure that there's something denoting the token so you can
* easily replace it */

/* Transfer the merged template to the message body */
message.Body = currentTemplate;

/* Clear out the address from the previous loop before adding the current one */
message.To.Clear();
message.To.Add(new MailAddress(mergeData[3]));
client.Send(message);
}

关于c# - 如何从 Windows 服务发送电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2418813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com