我正在开发一个uwp应用程序,用于发送带有嵌入式图像的html电子邮件。我正在使用EASendMail nuget pakage,一段时间后我的应用显示错误,这很好:
连接尝试失败,因为被连接方未 一段时间后正确响应或建立连接 失败,因为连接的主机无法响应。 (来自的例外 HRESULT:0x8007274c)
我认为试用期已过,该怎么办?
使用EASendMailRT; https://www.emailarchitect.net/easendmail/kb/csharp.aspx?cat=8
我找不到其他选择
try
{
string ToAddress = MailSendPage.toAddressTxtBox;
string Subject = MailSendPage.subjectTxtBox;
SmtpMail oMail = new SmtpMail("TryIt");
oMail.From = new MailAddress(username);
if(!String.IsNullOrEmpty(ToAddress)&& !String.IsNullOrEmpty(Subject))
{
oMail.To.Add(new MailAddress(ToAddress));
oMail.Subject = Subject;
EASendMailRT.SmtpClient oSmtp = new EASendMailRT.SmtpClient();
SmtpServer oServer = new SmtpServer(host);
oServer.User = username;
oServer.Password = password;
oServer.Port = port;
if (IsStackPanalHasImg() == true)
{
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
string[] files = Directory.GetFiles(localFolder.Path + @"\ProjectImages");
foreach (string eachfile in files)
{
foreach (string name in covertToHtml.ControlName)
{
string pattern = string.Format("{0}.jpeg", name);
if (Regex.IsMatch(eachfile, pattern))
{
Attachment oAttachment = await oMail.AddAttachmentAsync(eachfile);
oAttachment.ContentID = name;
}
}
}
}
await oSmtp.SendMailAsync(oServer, oMail);
popUpMsgs.popup(" The Mail has been sent");
}
} 捕获(异常ep) { popUpMsgs.popup(String.Format(“无法发送电子邮件,出现以下错误:{0}”,ep.Message)); }
答案 0 :(得分:1)
内置电子邮件API仅支持以Docs状态发送纯文本电子邮件:
此方法仅发送纯文本消息。您不能将邮件正文设置为HTML格式。
您可以做的是将图像附加到电子邮件:
EmailMessage mail = new EmailMessage();
mail.Sender = new EmailRecipient("test@example.com");
mail.To.Add(new EmailRecipient("someone@example.com"));
mail.Subject = "Hello";
mail.Body = "World";
var file = await StorageFile.GetFileFromApplicationUriAsync(
new Uri("ms-appx:///Assets/StoreLogo.png"));
mail.Attachments.Add(new EmailAttachment(file.Name, file));
await Windows.ApplicationModel.Email.EmailManager.ShowComposeNewEmailAsync(mail);
此外,仅在内置UWP Outlook Mail客户端的情况下,发送附件才能正常工作。经典Outlook很可能会完全忽略附件。
如果需要嵌入图像,则需要使用电子邮件服务。我可以推荐SendGrid或MailGun。两者都有C#API,就像轻轻松松一样工作。对于数量有限的电子邮件,它们也是免费的。
有几种方法可以将图像嵌入HTML电子邮件中。
最早的使用的是您在问题中使用的CID(内容ID)。
第二个选项使用Base64编码。您首先将图像转换为Base64字符串。关于此的教程很多,例如this blogpost。然后,您可以将图像嵌入src
标签的<img>
中:
<img src="data:image/jpeg;base64, YOURIMAGEINBASE64"/>
最后,您可以嵌入托管在某处的图像。如果您需要将电子邮件发送给许多收件人,这将最佳缩放,但是当然需要将图像实际托管在某个地方。在这三种方法中,大多数客户端也支持该方法。
这三种post中都对这三种方法进行了详细说明。