2014-07-03 3 views
0

Как отправить электронное письмо через службу SES Amazon с пользовательским заголовком? (т. е. я хочу прикрепить файл к электронному письму)AWS SendRawEmail с Meteor

Кажется, что здесь есть JavaScript AWS SDK - http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/frames.html, но включение его через браузер не работает, потому что SES недоступен (пока) и кажется слишком сложным, чтобы заставить его работать с узлом и метеор на бэкэнде.

ответ

0

Вы находитесь на правильном пути, но в конечном итоге вам нужно будет использовать метод HTTP.call() на стороне сервера, чтобы создать запрос POST/GET к сервису SES Amazon.

Сначала убедитесь, что установлены для Meteor следующие пакеты через Meteorite -

  • mrt add crypto-base
  • mrt add crypto-base64
  • mrt add crypto-hmac
  • mrt add crypto-md5
  • mrt add crypto-sha1
  • mrt add crypto-sha256

Кроме того, убедитесь у вас есть Метеор пакет meteor add httphttp.

Во-вторых получить ваш AWS AccessKeyId, secretAccessKey комбо - keyID отображается только на Amazon, если вы не помните secretKey вы просто должны регенерировать их обоих.

var url = 'https://email.us-east-1.amazonaws.com', 
    awsAKID = '<Access Key ID goes here>', 
    secretAccessKey = '<Secret Access Key goes here>', 
    signature = '', 
    currentDate = new Date().toUTCString(), 
    xAmznHeader = '', 
    emailContent = '', 
    resultSend = '-1'; 

// Encrypt the currentDate with your secretAccessKey 
// afterwards encode it in base64 
// Note: that you can substitute the SHA256 with SHA1 for lower encryption 
signature = CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(currentDate, secretAccessKey)); 
// this is the POST request header that Amazon uses to verify the validity of your request 
xAmznHeader = 'AWS3-HTTPS AWSAccessKeyId=' + awsAKID + ', Algorithm=HmacSHA256, Signature=' + signature; 
emailContent = 
    'From: <your verified sender e-mail here>\n' + 
    'To: <wherever you want to send it>\n' + 
    'Date: ' + currentDate +'\n' + 
    'Subject: Hi There\n' + 
    'MIME-Version: 1.0\n' + 
    'Content-Type: multipart/mixed; boundary="someBoundaryNameHere"\n' + 
    '--someBoundaryNameHere\n' + 
    'Content-Transfer-Encoding: 7bit\n\n' + 
    // body starts here, SES wants you to seperate the header from the body 
    //with an empty line, notice the extra '\n' above 
    'Readable text here\n' + 
    '--someBoundaryNameHere\n' + 
    'Content-Type: application/xml;\n' + 
    xmlString + 
    '\r\n'; 

// now we base64 encode the whole message, that's how Amazon wants it 
emailContent = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(emailContent)); 
// we can finally make the POST request 
resultSend = HTTP.call("POST", url, { 
    params: { 
     Action : "SendRawEmail", 
     "RawMessage.Data" : emailContent 
    }, 
    headers : { 
     'Date' : currentDate, 
     'X-Amzn-Authorization' : xAmznHeader 
    } 
}); 
1

Это может быть проще в использовании nodemailer

mrt add nodemailer 

стороне сервера код

var transport = nodemailer.createTransport("SES", { 
    AWSAccessKeyID: "AWSACCESSKEY", 
    AWSSecretKey: "AWS/Secret/key" 
}); 

transport.sendMail({ 
    to: '', 
    from: '', 
    headers : ['one', 'two'], 
    text: 'body here', 
    html: 'html here', 
    subject: 'subject' 
    attachments : [ 
     { 
      filename: "Filename.jpg", 
      filePath: "<path to file on your server>" 
     } 
    ] 
}, function(err, result) { 
    console.log(err,result); 
}); 

transport.close(); 

Там более подробную информацию о том, что варианты у вас есть в наличии, (многие из них!) На : https://github.com/andris9/Nodemailer

+0

Да, это точно, но я даже не знал, что это существовало - столько времени тратилось, пытаясь понять, как это сделать самому. О, хорошо, по крайней мере, я думаю, что мой метод дает вам немного больше свободы, создавая пользовательские мим-части. Спасибо, что упомянули об этом! –

0

Вы можете: включить aws .js, создав свою собственную мини-версию от AWS Builder. Включите этот .js файл на странице html &, вы можете отсылать мой ответ от here, чтобы вызвать код sendRawEmail с самой клиентской стороны javascript.

AWS.config.update({region: '<your_region>'}); 
AWS.config.update({apiVersion: '2010-12-01'}); 
var ses = new window.AWS.SES({"accessKeyId": "your_access_key", "secretAccessKey": "your_secret_key", "region": "<your_region>"});