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