- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- Perl/メール/Email-Senderによるメール送信 へ行く。
- 1 (2011-10-17 (月) 11:03:51)
- 2 (2011-11-02 (水) 17:47:03)
- 3 (2011-11-09 (水) 14:30:18)
Email-Senderによるメール送信
スクリプトはEUC-JPで保存する事とする。
#!/usr/bin/env perl use strict; use warnings; use Email::Sender::Simple qw(sendmail); use Email::Simple; use Email::Simple::Creator; use Encode qw/from_to/; my $from_name = '名前'; my $from_email = 'saburo@example.net'; my $subject = '件名'; my $body = '本文'; my @to_emails = ( 'taro@example.com', 'jiro@example.co.jp' ); my $_from_email = sprintf( '%s <%s>', $from_name, $from_email ); from_to( $_from_email, 'euc-jp', 'MIME-Header-ISO_2022_JP' ); from_to( $subject, 'euc-jp', 'MIME-Header-ISO_2022_JP' ); from_to( $body, 'euc-jp', 'iso-2022-jp' ); foreach my $to_email (@to_emails) { my $email = Email::Simple->create( header => [ To => $to_email, From => $_from_email, Subject => $subject, ], body => $body, attributes => { content_type => 'text/plain', charset => 'ISO-2022-JP', encoding => '7bit', }, ); sendmail($email); }
テスト実行
EMAIL_SENDER_TRANSPORT=Print ./1.pl
のようにすると、標準出力にメール情報が表示される。
MIMEエンコードによるヘッダ行の分割について
ただし、上のスクリプトでは、件名等が長いと、
From: =?ISO-2022-JP?B?GyRCTD5BMBsoQg==?= <test@test.com> Subject: =?ISO-2022-JP?B?GyRCN29MPjdvTD43b0w+N29MPjdvTD43b0w+N29MPjdvTD43b0w+GyhC?= =?ISO-2022-JP?B?GyRCN29MPjdvTD43b0w+N29MPjdvTD43b0w+N29MPhsoQg==?= Date: Sat, 29 Oct 2011 16:12:36 +0900
のように分割されるが、この改行コードがCRLFな為、プロバイダ(のメールサーバ)によってはメールヘッダとメールボディの処理が上手く出来ずに、ヘッダが本文に混じる事がある。これを避けるにはEmail::Simple::Creatorの_crlf()内の記述をLFに変更する。