问题描述
我正在使用Azure Sendgrid从我的ASP.net核心Web应用程序发送电子邮件。间歇地,某些收件人没有收到电子邮件。有些收件人会收到电子邮件,而其他收件人则不会。
为简洁起见,下面的代码不包括设置MailMessage(FROM,TO等...)
我将“ smtp.sendgrid.net”用作smtpserver,将“端口” 587用作smtpport。
string smtpServer = ConfigurationManager.AppSettings["MailSMTPServer"];
int smtpPort = int.Parse(ConfigurationManager.AppSettings["MailPort"]);
string username = ConfigurationManager.AppSettings["MailUserName"];
string pwd = ConfigurationManager.AppSettings["MailPassword"];
SmtpClient client = new SmtpClient(smtpServer);
client.Port = smtpPort;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential(username,pwd);
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.Send(mailMessage);
我已经与IT部门进行了交谈,那里没有收到电子邮件,以查看是否被阻止。没有电子邮件到达其服务器的记录。
解决方法
recommended是通过SMTP使用其REST API。
- SMTP中继会创建多个潜在故障点,这意味着发送方与 SendGrid可能导致这些“不正常”消息之一。
- Web API更快。 SMTP中继中多余的来回传递可能会导致外来客户的某些(最小)延迟 美国,因此离我们的入站数据中心更远。
- Web API还允许您通过使用API keys为程序添加额外的安全性。 API密钥可让您生成一个 身份验证凭据与您的用户名密码分开, 大大降低了有人使用您的帐户发送邮件的机会 垃圾邮件或网络钓鱼。
此外,由于outbound SMTP restriction in Azure,可能存在白名单问题。如果改用REST API,则可以克服这一点。
这里是一个C# example,使用其nuget。
var apiKey = "<send grid api key>";
var client = new SendGridClient(apiKey);
var from = new EmailAddress("test@example.com","Example User");
var subject = "Sending with SendGrid is Fun";
var to = new EmailAddress("test@example.com","Example User");
var plainTextContent = "and easy to do anywhere,even with C#";
var htmlContent = "<strong>and easy to do anywhere,even with C#</strong>";
var msg = MailHelper.CreateSingleEmail(from,to,subject,plainTextContent,htmlContent);
var response = await client.SendEmailAsync(msg);