Есть ли способ отправить HTML письмо со встроенным изображением в UWP - PullRequest
0 голосов
/ 24 января 2019

Я работаю над приложением 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");
}

} catch (Exception ep) {popUpMsgs.popup (String.Format ("Не удалось отправить электронное письмо со следующей ошибкой:{0} ", ep.Message));}

1 Ответ

0 голосов
/ 24 января 2019

Встроенный API электронной почты поддерживает отправку только текстовых сообщений электронной почты в виде Документы состояние:

Этот метод отправляет только текстовые сообщения. Вы не можете установить тело сообщения в формате 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);

Кроме того, отправка вложений работает хорошо только в случае встроенного почтового клиента Outlook UWP. Классический Outlook, скорее всего, вообще игнорирует вложения.

Если вам нужно встроить изображение, вам нужно будет воспользоваться службой электронной почты. Я могу порекомендовать SendGrid или MailGun. Оба имеют C # API, которые работают как на ладони. Они также бесплатны для ограниченного числа электронных писем.

Существует несколько способов вставить изображения в сообщение электронной почты в формате HTML.

Самый старый использует CID (Content ID), который вы использовали в своем вопросе.

Второй вариант - использование кодировки Base64. Сначала вы превращаете свое изображение в строку Base64. Об этом есть много учебных пособий, например, в этом посте . Затем вы можете просто вставить изображение в src вашего <img> тега:

<img src="data:image/jpeg;base64, YOURIMAGEINBASE64"/>

Наконец, вы можете встроить изображение, которое размещено где-то. Это лучше всего масштабируется, если вам нужно отправить электронное письмо многим получателям, но, конечно же, требуется фактически разместить изображение где-нибудь. Из трех методов он также поддерживается большинством клиентов.

Все три подхода подробно описаны в этом посте .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...