pretty code

2019年1月28日 星期一

自動發送電子書 email 到亞馬遜

亞馬遜有一個很棒的功能,你可以透過 email 將有支援的檔案寄到亞馬遜帳號﹝個人設置﹞,便可以在個人文檔中看到此電子書,理論上是跟 Amazon Drive 共用容量﹝5 GB﹞,但大陸亞馬遜似乎沒有連動?

底下是有支援的檔案格式:
Kindle格式(.MOBI、.AZW)
Microsoft Word(.DOC、.DOCX)
HTML(.HTML、.HTM)
RTF (.RTF)
文本(.TXT)
JPEG(.JPEG、.JPG)
GIF (.GIF)
PNG (.PNG)
BMP (.BMP)
PDF (.PDF)

既然身為一個程式設計師,寫程式自動發 email 應該是一件很合理的事。

個人用的是 Node.js﹝nodemailer﹞,這幾天在傳送時都一直遇到下列錯誤,"您发送至Kindle的邮件未附任何文件附件"。

原本以為是類似編碼等設定沒有設定好,但在下載了郵件原始檔後也看不出任何異狀。

後來靈機一動,想說會不會是沒有郵件本文的原因,就隨便插了一段空白區塊,果然就成功了。注意不能是空字串,之前就是用空字串才有問題。

底下是我目前的設定,提供給有需要的人參考。

var user = config.gmail.user;
var clientID = config.gmail.clientID;
var clientSecret = config.gmail.clientSecret;
var redirectURL = config.gmail.redirectURL;
var refresh_token = config.gmail.refresh_token;

var amazonEmail = config.amazonEmail;

const smtpTransport = nodemailer.createTransport({
    service: "gmail",
    auth: {
        type: "OAuth2",
        user: user,
        clientId: clientID,
        clientSecret: clientSecret,
        refreshToken: refresh_token,
        accessToken: accessToken
    }
});

const mailOptions = {
    from: user,
    to: amazonEmail,
    subject: "Convert",
    attachments: attachments,
    generateTextFromHTML: true,
    html: "<div></div>"
};

smtpTransport.sendMail(mailOptions, (error, response) => {
    if (error) return reject(error);
    smtpTransport.close();

    resolve(response);
});

沒有留言: