Отправка электронной почты в формате HTML через Gmail API приводит к получению сообщений с разметкой в ​​виде обычного текста. - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь настроить сервер, который, помимо прочего, обрабатывает регистрации. Это стандартный процесс, с которым все знакомы: получите имя пользователя, пароль и адрес электронной почты, затем отправьте письмо с подтверждением по адресу со ссылкой, содержащей токен, который активирует учетную запись.

Размещение ссылок внутри электронного письма означает создание электронного письма в формате HTML, что, как я понимаю, выполняется путем установки значения заголовка типа содержимого в электронном письме. У меня есть учетная запись gmail, настроенная для отправки, и когда я проверяю ее, регистрируя учетную запись для себя, я получаю электронное письмо ... но это текстовое электронное письмо, полное разметки HTML.

Вот код, который я использую для отправки электронного письма:

using System;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

using Google.Apis.Auth.OAuth2;
using Google.Apis.Gmail.v1;
using Google.Apis.Gmail.v1.Data;
using Google.Apis.Services;
using Google.Apis.Util.Store;

namespace MyProject.Mail {
    class GMailClient
    {
        private readonly GmailService _service;

        public GMailClient(UserCredential credential)
        {
            var initializer = new BaseClientService.Initializer { HttpClientInitializer = credential};
            _service = new GmailService(initializer);
        }

        public async Task SendMail(string sender, string recipient, string subject, string body) {
            var fullMessage = $@"To: {recipient}
From: {sender}
Subject: {subject}
Content-Type: text/html; charset=""utf-8""

{body}";
            var bytes = Encoding.UTF8.GetBytes(fullMessage);
            var b64 = Convert.ToBase64String(bytes).TrimEnd('=').Replace('+', '-').Replace('/', '_');
            var message = new Message
            {
                Raw = b64,
                SizeEstimate = body.Length
            };
            await _service.Users.Messages.Send(message, "me").ExecuteAsync().ConfigureAwait(true);
        }
    }
}

Самое странное, что полученное мной электронное письмо не является обычным текстом HTML, который я отправил. HTML-сообщение, которое я отправляю, выглядит так:

<html>
   <body>
      <p>Hi,
      <p>You're receiving this because you recently signed up for a MyProject account.  Here's your confirmation link: <a href="url here">url here</a>.
      <p> If you did not sign up for a MyProject account, please simply ignore this email.
   </body>
</html>

Но сообщение, которое я на самом деле получаю в папке входящих сообщений, выглядит следующим образом:

Привет,

Вы получаете это, потому что недавно зарегистрировали учетную запись MyProject. Вот ваша ссылка для подтверждения: [url здесь, фактически отформатирован как гиперссылка ]

Если вы не зарегистрировались для учетной записи MyProject, просто проигнорируйте это письмо.

(Обратите внимание на странные пробелы и отсутствие закрывающих тегов, между прочим.)

Это сбивает меня с толку. Есть идеи, что не так и как это исправить?

...