Список Отписаться в Aws-sdk nodejs
Как я могу добавить List-Unsubsribe : <mailto:abc@cdf.com>
заголовок моего исходящего сообщения электронной почты при использовании Amazon SES (Simple Email Service)? Я использую AWS' JavaScript SDK.
Вот несколько ссылок на документацию, на которые я смотрел, но не смог найти ответ: Link1, Link2, Link3, Link4.
Я пытался использовать API SendMail и SendRawEmail.
Использование API SendMail
let params={
Source: auth.host,
Destination: { ToAddresses: [email] },
Headers:{ListUnsubscribe :'<mailto:abc@def.com>'}, //error unexpected key Headers
Message: {Subject:{Data: subject },Body:{Text: {Data: mail}}}
}
ses.sendEmail(params,(err, data)=>{
if(err){
console.error(err);
}else{
console.log('Email sent: ');
console.log(data);
}
});
Использование API SendRawEmail
var mailOptions = {
from: auth.host,
subject: subject,
text: mail,
to: email,
};
var mail = mailcomposer(mailOptions);
mail.build(function (err, message){
var req = ses.sendRawEmail({RawMessage: {Data: message}});
req.on('build', function() {
req.httpRequest.headers["List-Unsubscribe"] = "<mailto:abc@abc.com>";
});
req.send(function (err, data) {
if(err) //code
else //code
});
});
2 ответа
Согласно документации AWS, вы можете указывать только пользовательские заголовки, используя API SendRawEmail:
API SendRawEmail предоставляет вам гибкость для форматирования и отправки ваших собственных необработанных сообщений электронной почты, указав заголовки, части MIME и типы контента. SendRawEmail обычно используется опытными пользователями. Вам необходимо предоставить тело сообщения и все поля заголовка, указанные в соответствии с требованиями спецификации формата сообщений в Интернете (RFC 5322). Для получения дополнительной информации см. Отправка необработанной электронной почты с помощью Amazon SES API.
Это объясняет, почему ваш первый пример не работает. Здорово.
Вот почему ваш второй пример, который на самом деле использует API SendRawEmail, не работает.
К сожалению, чтобы указать пользовательские заголовки при отправке электронной почты, вы должны указать их встроенными в теле необработанного сообщения. Существуют довольно строгие требования к форматированию, которые вы должны соблюдать при создании этого необработанного сообщения, иначе ваша доставка может быть неудачной / неправильно выводиться. Хотя это было бы чрезвычайно полезно, нет никакого метода API, который вы можете использовать, который позволял бы вам использовать заданные заголовки, используя пары ключ / значение.
Это ограничение, вероятно, связано с тем, что AWS придется декодировать ваше необработанное сообщение в кодировке base64 (которое может быть любым из типов Buffer, blob, typed array, string), надеяться, что вы правильно отформатировали свое сообщение, и вставить свои заголовки в правильное местоположение. Это, без сомнения, было бы полезно для конечного пользователя API, но определенно кажется кошмаром с их стороны со всей проверкой и обработкой ошибок, которые они должны были бы сделать.
Вот подробные требования для отправки электронной почты с помощью API SendRawEmail:
RawMessage - (карта) Необработанный текст сообщения. Клиент несет ответственность за обеспечение следующего:
Сообщение должно содержать заголовок и тело, разделенные пустой строкой. Все обязательные поля заголовка должны присутствовать. Каждая часть составного сообщения MIME должна быть правильно отформатирована. Типы контента MIME должны быть среди тех, которые поддерживаются Amazon SES. Для получения дополнительной информации перейдите к Руководству разработчика Amazon SES. Должен быть в кодировке base64. Согласно RFC 5321, максимальная длина каждой строки текста, включая символ, не должна превышать 1000 символов. Данные - обязательны - (Буфер, Типизированный массив, Blob, String) Необработанные данные сообщения. Эти данные должны быть закодированы в base64, если вы обращаетесь к Amazon SES напрямую через интерфейс HTTPS. Если вы обращаетесь к Amazon SES с помощью AWS SDK, SDK позаботится о базовой 64-кодировке. Во всех случаях клиент должен убедиться, что формат сообщения соответствует стандартам интернет-почты в отношении полей заголовка письма, типов MIME и кодировки MIME.
Заголовки To:, CC: и BCC: в необработанном сообщении могут содержать список групп.
Если вы используете SendRawEmail с авторизацией отправки, вы можете включить X-заголовки в необработанное сообщение, чтобы указать адреса "Source", "From" и "Return-Path". Для получения дополнительной информации см. Документацию для SendRawEmail.
Не включайте эти X-заголовки в подпись DKIM, поскольку они удаляются Amazon SES перед отправкой электронного письма. Для получения дополнительной информации перейдите к Руководству разработчика Amazon SES.
Мои два цента
Это кажется очень неудобным. Я бы предложил использовать такой сервис, как Sendgrid, который имеет встроенные функции, такие как управление подпиской (подписка / отмена подписки), управление шаблонами и целый ряд функций, которые должна иметь современная выделенная служба электронной почты. Однако, если у вас нет выбора, то, возможно, наслаждайтесь тем, что API SendRawEmail дает вам много настроек, но за счет того, что это немного утомительно.
Вы можете получить доступ к этой информации и многим другим из документации по API AWS SES Javascript:
Проблема в вашем втором примере заключается в том, что вы добавили заголовок в запрос к amazon, а не к самому Email
Пожалуйста, попробуйте использовать следующий пример кода:
var mailOptions = {
from: auth.host,
subject: subject,
text: mail,
to: email,
headers: {
'List-Unsubscribe': "<mailto:abc@abc.com>"
}
};
var mail = mailcomposer(mailOptions);
mail.build(function (err, message){
var req = ses.sendRawEmail({RawMessage: {Data: message}});
req.send(function (err, data) {
if(err) //code
else //code
});
});