How to convert EmailMessage alternate views into SendGrid Html and Text(如何将EmailMessage备用视图转换为SendGrid HTML和文本)
问题描述
我有一个发送邮件的接口
public interface IMailSender
{
void SendMail(MailMessage message);
}
创建邮件时,我使用AlternateView(纯文本和html)
现在我想创建一个SendGridMailSender类来实现该接口,但我的问题是我不知道如何根据MailMessage填充SendGrid.Html和SendGrid.Text。我能找到的唯一解决方案是使用StreamReader并按索引访问AlternateViewsCollection,我想还有一个更好的解决方案我想不出来。
public void SendMail(MailMessage message)
{
var sendGridMessage = CreateSendGridMessage(message);
// Create network credentials to access your SendGrid account.
var user = "userCredential";
var pswd = "userPaswd";
var credentials = new NetworkCredential(user, pswd);
// Create an SMTP transport for sending email.
var transportSMTP = SMTP.GetInstance(credentials);
// Send the email.
transportSMTP.Deliver(sendGridMessage);
}
private SendGrid CreateSendGridMessage(MailMessage mail)
{
var sendGridMessage = SendGrid.GetInstance();
sendGridMessage.From = mail.From;
var recipients = mail.To;
foreach (var recipient in recipients)
{
sendGridMessage.AddTo(recipient.ToString());
}
var stream = mail.AlternateViews[0].ContentStream;
using (var reader = new StreamReader(stream))
{
sendGridMessage.Text = reader.ReadToEnd();
}
stream = mail.AlternateViews[1].ContentStream;
using (var reader = new StreamReader(stream))
{
sendGridMessage.Html = reader.ReadToEnd();
}
return sendGridMessage;
}
谢谢
推荐答案
访问AlternateView内容的唯一方法是通过流,因此您的解决方案是正确的,尽管您还应该检查ContentType以确保mail.AlternateViews[0]实际上是您的文本部分,依此类推。
这篇关于如何将EmailMessage备用视图转换为SendGrid HTML和文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何将EmailMessage备用视图转换为SendGrid HTML和文本
基础教程推荐
- .NET SerialPort DataReceived 事件未触发 2022-01-01
- 如何使用 .Net 检查 Active Directory 服务器是否已启动并正在运行? 2022-01-01
- 我应该在后面的代码中直接使用 Linq To SQL 还是使 2022-01-01
- C# 从 List<List<int>> 中删除重 2022-01-01
- WPF 模态进度窗口 2022-01-01
- 如果有人提交恶意软件Nuget包怎么办? 2022-01-01
- 禁止输入少量字符,例如'<'、'&a 2022-01-01
- Azure Functions:CosmosDBTrigger 未在 Visual Studio 中触发 2022-01-01
- Moq It.Is<>不匹配 2022-01-01
- 当值可以是对象或空数组时反序列化 JSON 2022-01-01
