首页 > 解决方案 > C# SMTP 在生产环境中发送带有空正文的电子邮件

问题描述

我正在处理一个需要向用户指定的电子邮件发送邀请电子邮件的项目。我正在使用 C#、SMTP 和正文是一个 html 模板。

如果我尝试,本地没有问题,我可以发送电子邮件并且一切都按预期工作,我会收到带有正确模板的电子邮件。

本地发送的电子邮件

当我尝试从生产环境发送电子邮件时,问题就出现了,从那里收到的电子邮件是空的,没有正文模板的痕迹。

从生产环境发送的带有空正文的电子邮件

这是我用来发送电子邮件的代码。

MailMessage msg = new MailMessage(Configuration["EmailFrom"],to);
msg.Subject = subject;
msg.Body = this.emailBody;
msg.IsBodyHtml = true;
msg.BodyEncoding = System.Text.Encoding.UTF8;

SmtpClient smtpClient = new SmtpClient(Configuration["SMTP"], Convert.ToInt32(Configuration["PORT"]));
System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(Configuration["EmailFrom"], Configuration["PasswordEmailFrom"]);
smtpClient.Credentials = credentials;
smtpClient.EnableSsl = true;
smtpClient.Send(msg);

现在,我知道生产环境托管在 AWS 服务器中,但不知道服务器的配置或它是否与问题有关。

在某些情况下,模板使用的是 div 而不是表格,但我认为这是一个不相关的问题,所以我真的不知道问题出在哪里。

编辑: 我从数据库中获取我将用来替换的信息,并从服务器中托管的本地 HTML 文件中获取模板。这是设置电子邮件模板并替换内容的代码:

EmailService sendDriverInvitation = new EmailService(_env);

sendDriverInvitation.setEmailTemplate($"ClientApp/{AssetsDirectory}/assets/emailTemplates/InvitationDriver.html");

sendDriverInvitation.emailBody = sendDriverInvitation.emailBody.Replace("[DER Name]", userName).Replace("[Company Name]", DbaName);
sendDriverInvitation.sendMail(email, "Invitation Email");

这是 setEmailTemplate 的代码:

HTMLReader reader = new HTMLReader();

string htmlCompleteTemplatePath = Path.Combine(webRoot, htmlTemplatePath);
this.emailBody = reader.ReadHtmlFile(htmlCompleteTemplatePath);

标签: c#asp.netamazon-web-servicesasp.net-coregmail

解决方案


推荐阅读