Предварительное заполнение экрана создания Gmail текстом HTML - PullRequest
11 голосов
/ 06 апреля 2010

Привет, ребята, я обнаружил, что для открытия экрана GMAIL вам нужно войти в систему и открыть следующую ссылку:

https://mail.google.com/a/domain/?view=cm&fs=1&tf=1&source=mailto&to=WHOEVER%40COMPANY.COM&su=SUBJECTHERE&cc=WHOEVER%40COMPANY.COM&bcc=WHOEVER%40COMPANY.COM&body=PREPOPULATEDBODY

Замена переменных заполняет соответствующие места в форме создания. Однако, если я хочу ввести в текст многострочный текст или разрывы строк, он просто не работает, даже если я его кодирую. Есть идеи?

Ответы [ 6 ]

14 голосов
/ 06 апреля 2010

Убедитесь, что ваш метод UrlEncode действительно переводит символы новой строки в "% 0a". Вот пример двухстрочного электронного письма:

https://mail.google.com/mail/?view=cm&ui=2&tf=0&fs=1&to=WHOEVER%40COMPANY.COM&su=SUBJECTHERE&body=LINE1%0aLINE2

8 голосов
/ 30 марта 2011

Gmail поддерживает то, что в HTML5 registerProtocolHandler () испускает.

Пример:

var compose = "https://mail.google.com/mail/?extsrc=mailto&url=" + encodeURIComponent("mailto:?subject=test");

Это то, что Gmail ожидает, что вы будете использовать. Измените начало для доменного специфического URI составления конечно.

Тем не менее, он загружает составную форму сам по себе (не интегрирован со страницей входящих). Итак, если вы хотите, чтобы составная форма была интегрирована в папку входящих сообщений, вам необходимо загрузить:

"https://mail.google.com/mail/?compose=1&view=cm&fs=1&to=1&su=2&body=3&cc=4&bcc=5"

вместо этого. Но это требует, чтобы вы сначала проанализировали mailto URI, чтобы получить значения hf и исправить их процентное кодирование, чтобы убедиться, что они подходят для отправки в HTTP URI. Подробнее об этом см. Ниже.

Теперь, то, что Gmail делает с HTML5-составным URI, это процентное декодирование параметра url, чтобы получить mailto URI. Затем он анализирует почтовый URI, чтобы получить значения hf. Затем он использует эти значения hf для создания URI, подобного интегрированному во входящие, и перенаправляет вас на него.

Проблема метода HTML5 в Gmail заключается в том, что он не кодирует символы «+» в процентах до hfvalues ​​до «% 2B». Конечным результатом этого является то, что символы «+» в почтовом URI (они не являются пробелами в почтовом URI) появляются как пробелы в форме создания Gmail.

Чтобы обойти ошибку Gmail, просто выполните:

var compose = "https://mail.google.com/mail/?extsrc=mailto&url=" + encodeURIComponent("mailto:?subject=test".replace(/\+/g, "%2B"));

вместо.

Об ошибке сообщили несколько лет назад, но Gmail отказывается ее исправить.

Как вы также должны видеть, для встроенного URI составного почтового ящика, если у вас был почтовый URI "mailto:? Subject = 1 + 2", вам нужно убедиться, что вы выдавали su = 1% 2B2 в compose URI, а не su = 1 + 2. Последнее приведет к тому, что вместо поля «+» в поле темы появится пробел. Эта часть не является ошибкой в ​​Gmail. Так работает HTTP.

Вы можете увидеть источник моего расширения Gmail Compose для Opera (распаковать его), чтобы увидеть, как я работаю в HTML5. Это очень просто Но он не содержит обходного пути + к% 2B.

Тем не менее, вы можете увидеть более новую версию расширения , которое я тестирую (просто нужен кто-то, чтобы проверить специфичную для домена опцию в настройках) для более сложной обработки. В этом примере используется мой собственный универсальный синтаксический анализатор mailto URI , чтобы нормализовать URI mailto и его hfvalues ​​для обработки регистра "+", небезопасных символов и дублирования hfvalues. Он также предлагает возможность выбрать, хотите ли вы использовать URI HTML5 или нет.

Вы также можете взглянуть на этот пользовательский JS-скрипт для Opera , чтобы узнать, как это сделать.

О проблеме дублирования hfvalue, упомянутой ранее, и других материалах mailto URI см. my mailto URI spec , который использовался для исследования и обратной связи для RFC6068 .

Примечание. Если у пользователя Gmail включено редактирование расширенного текста, это не означает, что Gmail будет принимать HTML-разметку в составном URI и обрабатывать ее как таковую. Это все интерпретируется как текст.

2 голосов
/ 15 августа 2010

Я использовал стандартный javascript encodeURIComponent () для кодирования многострочного тела. Это сработало.

Также те, кто хочет предварительно заполнить общую почту Gmail, а не учетную запись, специфичную для домена приложения, используют этот URL вместо:

https://mail.google.com/?view=cm&fs=1&tf=1&....

1 голос
/ 30 июня 2015

Спасибо за этот совет. Одна вещь, которая не была указана в других ответах, заключается в том, что если вы вошли в Gmail с несколькими учетными записями, например, с личной и профессиональной учетной записью в Службах Google, использование https://mail.google.com/a/domain.com/ вместо https://mail.google.com/mail/ позволяет указать почтовый ящик, чтобы использовать для отправки сообщения. В противном случае Gmail просто загружает учетную запись, в которую вы вошли первым.

1 голос
/ 17 февраля 2014

В настоящее время (февраль 2014 г.), чтобы предварительно заполнить экран создания с полями to и subject, используйте:

https://mail.google.com/mail/?&v=b&cs=wh&to=alias@domain.com&subject=subject%20goes%20here

Примечание: cs=wh имеет значение, поскольку гиперссылка создания использует cs=b, которая не заполняется автоматически.

0 голосов
/ 17 сентября 2014

Другое ограничение заключается в том, что запросы GET ограничены определенным количеством символов, поэтому попытка использовать метод параметров MAILTO + GET не будет работать для больших кусков контента. Кто-нибудь нашел другой способ отправить больший контент в новое окно Compose через какой-то веб-запрос?

Из того, что я могу сказать, это будет трудно, поскольку mailto на самом деле является корректным действием браузера?

...