Как создать тело сообщения для Amazon SES sendRawEmail

Привет,

На мой взгляд, строка подключения для ADO.NET (в данном случае SqlConnection) не может использовать метаданные. Вы используете один для Entity Framework. ADO.NET должен выглядеть примерно так:

"data source=KAPS-PC\KAPSSERVER;initial catalog=vibrant;integrated security=True"

Итак, чтобы подвести итог, вам нужны две отдельные строки подключения: одна для EF и одна для ADO.NET.

Souce: http://forums.iis.net/post/2097280.aspx

blockquote>
0
задан Snowball 16 January 2019 в 07:29
поделиться

2 ответа

Вы должны взглянуть на другой пакет npm, отвечающий за составление почтовых сообщений с заголовками, как, например, nodemailer . После нескольких минут поиска я нашел пример с настройкой заголовков и электронной почтой через SES здесь , они используют mailcomposer, который был предшественником nodemailer

UPDATE: [ 116] Кажется, что nodemailer больше не предоставляет метод build, но есть еще один пакет из них nodemailer-ses-transport , который, кажется, делает именно то, что вам нужно, настраивая заголовки и отправляя через SES. [115 ]

0
ответ дан Alexey 16 January 2019 в 07:29
поделиться

Вот функция barebone, которую я придумал, которая имеет только AWS Javascript SDK в качестве зависимости. Вначале я ошибся в том, что Base 64 кодировал RawMessage.Data, но AWS SDK уже позаботился об этом.

Пустые строки \n также важны.

const sendRawEmail = async () => {

    // Set up from_name, from_email, to, subject, message_id, plain_text, html and configuration_set variables from database or manually

    var date = new Date();

    var boundary = `----=_Part${ Math.random().toString().substr( 2 ) }`;

    var rawMessage = [
        `From: "${ from_name }" <${ from_email }>`, // Can be just the email as well without <>
        `To: ${ to }`,
        `Subject: ${ subject }`,
        `MIME-Version: 1.0`,
        `Message-ID: <${ message_id }@eu-west-1.amazonses.com>`, // Will be replaced by SES
        `Date: ${ formatDate( date ) }`, // Will be replaced by SES
        `Return-Path: <${ message_id }@eu-west-1.amazonses.com>`, // Will be replaced by SES
        `Content-Type: multipart/alternative; boundary="${ boundary }"`, // For sending both plaintext & html content
        // ... you can add more headers here as decribed in https://docs.aws.amazon.com/ses/latest/DeveloperGuide/header-fields.html
        `\n`,
        `--${ boundary }`,
        `Content-Type: text/plain; charset=UTF-8`,
        `Content-Transfer-Encoding: 7bit`,
        `\n`,
        plain_text,
        `--${ boundary }`,
        `Content-Type: text/html; charset=UTF-8`,
        `Content-Transfer-Encoding: 7bit`,
        `\n`,
        html,
        `\n`,
        `--${ boundary }--`
    ]

    // Send the actual email
    await ses.sendRawEmail( {
        Destinations: [
            to
        ],
        RawMessage: {
            Data: rawMessage.join( '\n' )
        },
        Source: from_email, // Must be verified within AWS SES
        ConfigurationSetName: configuration_set, // optional AWS SES configuration set for open & click tracking
        Tags: [
            // ... optional email tags
        ]

    } ).promise();

}

Это служебные методы для форматирования заголовка даты. Вы также можете использовать библиотеку moment, например, moment().format('ddd, DD MMM YYYY HH:MM:SS ZZ');, но это не имеет значения, поскольку заголовок даты все равно перезаписывается AWS SES.

// Outputs timezone offset in format ZZ
const getOffset = ( date ) => {

    var offset          = - date.getTimezoneOffset();
    var offsetHours     = Math.abs( Math.floor( offset / 60 ) );
    var offsetMinutes   = Math.abs( offset ) - offsetHours * 60;

    var offsetSign      = ( offset > 0 ) ? '+' : '-';

    return offsetSign + ( '0' + offsetHours ).slice( -2 ) + ( '0' + offsetMinutes ).slice( -2 );

}

// Outputs two digit inputs with leading zero
const leadingZero = ( input ) => ( '0' + input ).slice( -2 );

// Formats date in ddd, DD MMM YYYY HH:MM:SS ZZ
const formatDate = ( date ) => {

    var weekdays = [ 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun' ];

    var months = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ];

    var weekday = weekdays[ date.getDay() ];

    var day = leadingZero( date.getDate() );

    var month = months[ date.getMonth() ];

    var year = date.getFullYear();

    var hour = leadingZero( date.getHours() );

    var minute = leadingZero( date.getMinutes() );

    var second = leadingZero( date.getSeconds() );

    var offset = getOffset( date );

    return `${ weekday }, ${ day } ${ month } ${ year } ${ hour }:${ minute }:${ second } ${ offset }`;

}

0
ответ дан Snowball 16 January 2019 в 07:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: