2014-11-06 4 views
2

По какой-то причине API Gmail не отправит html-адрес электронной почты. Отправка открытого текста работает отлично:Отправьте HTML-письмо с помощью API Gmail

var message = 'From: Me <[email protected]>\r\n' + 
    'To: Me <[email protected]>\r\n' + 
    'Subject: Hello\r\n\r\n' 
    'World' 

var raw = btoa(message) 

Тогда при попытке HTML, он просто показывает, как пустое сообщение:

var message = 'From: Me <[email protected]>\r\n' + 
    'To: Me <[email protected]>\r\n' + 
    'Subject: Hello\r\n' 
    'Content-Type: text/html; charset=utf-8\r\n' + 
    'Content-Transfer-Encoding: quoted-printable\r\n\r\n' + 
    '<html><body>' + 
    '<h1>World</h1>' + 
    '</body></html>' 

var raw = btoa(message) 

Любые идеи? Может быть, потому что это не соответствует RFC 2822?

+0

Как вы отправляете письма с использованием JavaScript? – Yang

+0

Я использую javascript для отправки запроса на отправку [API Gmail] (https://developers.google.com/gmail/api/v1/reference/users/messages/send), где необработанная переменная является параметром в запрос. Извините, я понимаю, что на самом деле я не предоставлял никакого контекста. – robs

+0

Как вы создаете строку rfc2822, переменную сообщения в приведенном выше примере. Я сижу жестко закодированным или есть ли другие способы? @rob – Sasikanth

ответ

4

Для начала вам необходимо использовать кодировку base64url, используя безопасный алфавит web/url, а не только стандартный btoa() base64. Если это не поможет, вы можете опубликовать свой код и точное сообщение об ошибке, которое вы получаете? (Или это работает и не отображается как html?)

+0

Hm Я попробовал 'encodeURI (btoa (message))', но я получаю 400, когда есть символ +, поэтому я думаю, что это будет стандартный base64. Отправка html-адреса электронной почты проходит без ошибок, просто результирующее тело сообщения пуст. – robs

+1

это не encodeURI(), это тоже не так. вы хотите base64url(), который похож на btoa(), но не использует «/» и «+». btoa() может работать нормально, если ничего не получится закодировать до «/» или «+». :) Если в javascript нет base64url, просто btoa() тогда .replace ("/", "_"). replace ("+", "-"). Вы можете включить весь ответ (как HTTP-заголовки, так и тело)? обязательно должно быть тело. –

+0

Вправо, btoa (сообщение) .replace ('/', '_'). Replace ('+', '-') отлично работает. Спасибо, сэр! – robs

Смежные вопросы