UTF-8 限定。タイトルは英語のみ。エラーが起きたら終了。
CentOS 5, Node.js 0.6.6 で確認。
作成 2011.12.29
更新 2012.01.04
更新 2012.01.04
Node.js でメール送信サンプル
コード
var smtp_host = '127.0.0.1';
var smtp_from = 'mail-from@example.com';
var smtp_to = 'mail-to@example.com';
send_mail(smtp_host,smtp_to,smtp_from,'test subject','test body2 日本語');
function send_mail(mail_server,mail_to,mail_from,mail_subject,mail_body){
var net = require('net');
var client_state = 0;
var client = net.connect(25,mail_server,function(){
console.log('connected');
client.setTimeout(60*1000,function(){
console.log('Timeout');
client.end();
});
});
client.on('data',function(data){
var sv_res = data.toString();
var arr_str = sv_res.split(' ');
console.log('SV> '+sv_res);
if(isNaN(arr_str[0])){ return; }
var int_code = parseInt(arr_str[0]);
var str = 'QUIT';
if(int_code == 221){ return; }
if(int_code == 220){
str = 'HELO localhost.localdomain';
}else if(int_code == 250){
if(client_state == 0){
str = 'MAIL FROM: '+mail_from;
client_state = 1;
}else if(client_state == 1){
str = 'RCPT TO: '+mail_to;
client_state = 2;
}else if(client_state == 2){
str = 'DATA';
client_state = 3;
}
}else if(int_code == 354){
client.write('From: '+mail_from+'\r\n');
client.write('To: '+mail_to+'\r\n');
client.write('Subject: '+mail_subject+'\r\n');
client.write('Content-Type: text/plain; charset="UTF-8"\r\n');
client.write('\r\n'+mail_body+'\r\n');
str = '.';
}
client.write(str+'\r\n');
console.log('<CL '+str);
});
client.on('end',function(){
console.log('client disconected');
});
}
実行結果
connected SV> 220 mail.example.com ESMTP Postfix <CL HELO localhost.localdomain SV> 250 mail.example.com <CL MAIL FROM: mail-from@example.com SV> 250 2.1.0 Ok <CL RCPT TO: mail-to@example.com SV> 250 2.1.5 Ok <CL DATA SV> 354 End data with <CR><LF>.<CR><LF> <CL . SV> 250 2.0.0 Ok: queued as 8E0622E0D0 <CL QUIT SV> 221 2.0.0 Bye client disconected
タグ: Node.js