読者です 読者をやめる 読者になる 読者になる

Foxtrack

福岡の家具屋でITエンジニアやってます。

メールは受け取れたけど文字化けで読めないよ問題

AWS LambdaのNodeJSでAWS SESで受信したメールの文字化けをどうにかする。

先日、AWS SESでどうにかメールを受信できるようになったものの、メールが文字化けする問題が起こっていました。

f:id:foxtrack:20160617001401p:plain

これは読めない・・・

iconvというモジュールを使えばいけそうだが、Lambdaという環境でやるには非常に面倒くさそうである。(できない事はないらしい) qiita.com

なんて思ってたところこんなすごい処理があったので参考にさせていただく。

www.bokukoko.info

今回は特定のメール(iso-2022-jpで送られてくる)しかこない想定なので、とりあえずiso-2022-jp => UTF-8に変換させてみる。

f:id:foxtrack:20160617001839p:plain

いけた!!!

ちなみにLambdaのコードはこんな感じ

'use strict';
console.log('Loading function');
var aws = require('aws-sdk');
var s3 = new aws.S3();
var fs = require('fs');
var filepath = "/tmp/filepath";

exports.handler = (event, context, callback) => {
  var bucket = event.Records[0].s3.bucket.name;
  var key = event.Records[0].s3.object.key;
  s3.getObject({
    Bucket:bucket,
    Key:key
  },function(err,data) {
    if (err) {
      console.log(err);
    } else {
      fs.writeFileSync(filepath, String(data.Body));
      var exec = require('child_process').exec;
      var cmd = "iconv -f iso-2022-jp -t utf-8 " + filepath;
      var child = exec(cmd, function(err, stdout, stderr) {
        if (err) callback(err);
        console.log(stdout);
        callback(null, stdout);
      });
    }
  });

  callback(null, 'SES OK!!!!');
};