有什么方法可以在UWP中发送带有嵌入式图像的HTML电子邮件

时间:2019-01-24 07:36:21

标签: c# uwp .net-core

我正在开发一个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)); }

1 个答案:

答案 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中都对这三种方法进行了详细说明。