メッセージ

2008年06月21日の記事

PHPで日本語メール送信

2008/06/21 未分類 spok
hal456トップページ

QdSimpleMailとは

QdSimpleMailとは、PHPのmb_send_mailをさらに使いやすく、文字化けの少ない日本語メールを送信することのできるユーザー関数です。
mb_send_mailは、ヘッダーで日本語を使用する際の制限があり、例えば、fromに送信者の名前を入れるのはちょっと工夫しなければなりません。
しかし、QdSimpleMailは、入力されたマルチバイト文字の文字コードを自動判別し、適切な文字コードに置き換えて、MIMEエンコードするため、文字化けリスクは相当低くなっています。
テキストメールのみの対応ですが、軽い動作で、文字化けしない日本語メールを送信することができます。

使い方リファレンスダウンロード
  qd_simple_mail( 'to@eaxmaple' , ・・・・・)
というmb_send_mail()ライクな簡単メール関数です。

特徴

  • PHP4,5対応
  • Qdmailがベースなので、文字化け防止に関して高信頼性
  • 日本語メールのスタンダード、iso-2022-jpがデフォルト
  • 軽い(300行以内のソースコード) Qdmailの10分の1
  • ファイル1つの簡単構成
  • ユーザーがmb_conver_encodingする必要がありません。
  • qd_simple_mail() という簡単関数型。mb_send_mailライクです。
  • cc,bcc,reply-toなど任意の追加ヘッダーを設定可能
  • utf-8可能
  • 本文BASE64エンコード可能
  • 自由に使えるMITライセンス
  • 内部でmb_send_mailは呼び出さず、mail関数を呼びだし

制限

  • テキストメールのみ可能(HTMLメールは送信できません)
  • toは1カ所のみ。複数の宛先には対応していません。
  • cc,bccはそれぞれ1宛先のみ。
  • ワードラップ(自動折り返し)機能なし。(改行は自分で)
  • SMTP送信は未対応
  • 添付ファイル未対応
  • windows環境の場合、toヘッダに日本語が使えない場合があり得ます。参考-PHPマニュアルmail(mail関数の制限です。)
こうした制限を超えたい場合は、高機能日本語メールライブラリQdmailを使って下さい。

環境

  • mb_*関数が使える環境であること
  • mail関数が使える環境であること

備考

HTMLメールも、添付ファイルも工夫すれば送信することもできますが、それならば、高機能日本語メールライブラリQdmailを使ったほうがいいと思います。

使い方(Howto)

2008/06/21 未分類 spok

使い方 HOW TO

関数リファレンスはこちら

もっとも単純なメール

使う前に、qd_simple_mail.phpをインクルードしてください。
include('qd_simple_mail.php');

$to = 'to@example.com';
$to_name = '○○さん';
$subject = 'お問い合わせの件';
$from = 'from@example.com';
$content = 'メールの本文';

 qd_simple_mail(  $to , $to_name , $subject , $content , $from );

フロムにも、マルチバイトの名前を付ける。

$to = 'to@example.com';
$to_name = '○○さん';
$subject = 'お問い合わせの件';
$from = 'from@example.com';
$from_name = '××事務局';
$content = 'メールの本文';

 qd_simple_mail(  $to , $to_name , $subject , $content , $from ,$from_name);

cc,bcc,reply-toを加える

ccには、日本語名を加え、bccにはメールアドレスだけの例
$to = 'to@example.com';
$to_name = '○○さん';
$subject = 'お問い合わせの件';
$from = 'from@example.com';
$content = 'メールの本文';

$additional = array(
    'Cc'=>array('cc@example.com','▲▲さん'),
    'Bcc'=>'bcc@example.com',
    'Reply-to'=>'reply@example.com',
);

 qd_simple_mail(  $to , $to_name , $subject , $content , $from , null ,$additional );

さらに 本文をutf-8 & base64エンコード

$to = 'to@example.com';
$to_name = '○○さん';
$subject = 'お問い合わせの件';
$from = 'from@example.com';
$content = 'メールの本文';

$additional = array(
    'Cc'=>array('cc@example.com','▲▲さん'),
    'Bcc'=>'bcc@example.com',
    'Reply-to'=>'reply@example.com',
);

$option = array(
    'CHARSET_CONTENT'=>'utf-8',
    'ENC_CONTENT'=>'base64',
);

 qd_simple_mail(  $to , $to_name , $subject , $content , $from , null ,$additional , $option );

リファレンス

2008/06/21 未分類 spok

関数リファレンス

使い方の例はこちら

 qd_simple_mail( 宛先アドレス , 宛先日本語名 , 件名 , 本文 , フロムアドレス , フロム日本語*1  , 追加ヘッダー*1 , オプション*1 ,MTAオプション*1)
追加ヘッダーの指定方法
追加ヘッダーは、array( 'ヘッダー名'=>'値' )
値が、メールアドレスであり、かつ、名前もつけたい場合は、以下のようにする
array('cc'=>array('cc@example.com','○○さん'))
オプションの指定方法
array('オプション名'=>'値')
オプションの種類
オプション名意味
CHARSET_HEADER文字コードヘッダーの文字コード指定*2
CHARSET_CONTENT文字コード本文の文字コード指定*2
CHARSET_ORG文字コードユーザー入力の文字コード指定*3
ENC_CONTENT7bit,8bit,base64本文のエンコード指定*4
LF-ヘッダーの改行コードをLFにする*5
CRLF-ヘッダーの改行コードをCRLFにする*5

QdSimpleMailに渡す文字コード

QdSimpleMailに渡す文字コードは、自動判別するため、特に意識する必要がありません。
明示的にコードを指定する場合は、文字コードの明示的指定をご覧下さい。

*1 : 省略可

*2 : デフォルトはiso-2022-jp

*3 : デフォルトでは自動判別

*4 : デフォルトは7bit

*5 : デフォルトはCRLF

トラブルシューティング

2008/06/21 未分類 spok

本文が消えてしまう。携帯でうまく受信できない。

改行コードの変更

QdSipleMailでは、RFCに従い、ヘッダーの改行コードをCRLFとしています。
しかし、sendmailではないメール送信サーバー、特にqmailを使用している場合、改行コードがCRLFではなくLFのみでないと誤動作することがあるようです。
自動認識を装備していますが、当該自動認識がうまく働かない場合もあるかと思います。
その場合は、強制的に改行コードをLFのみにするように変更してみてください。
改行コードをLFのみにする方法
オプションで、LFを指定してください。
$option = array('LF'=>true);

QdSimpleMailリファレンス

ユーザー入力文字コードの変更

QdSimpleMailでは、ユーザーから入力される文字コードはmb_detect_encoding関数にて自動判別します。
しかし、入力文字数が少ない時などは、その自動判別に失敗する時があります。
その場合は、オプションにて、入力される文字コードを明示的に指定することで文字化けを押さえられる場合があります。
例えばutf-8で入力している場合には、以下のようにしてみてください。

$option = array('CHARSET_ORG'=>'UTF-8');

QdSimpleMailリファレンス

本文の改行について

2008/06/21 未分類 spok
QdSimpleMailでは、本文中の改行について、文字数による折り返しは行っていません。
ユーザーが改行しなければ、QdSimpleMailもそのまま改行なしで送信します。

一方で、インターネットの標準的なルールでは、1行は75バイトが推奨され*1、1行が1000バイトを超えることは許されません*2

ですので、ユーザーにおかれましては、必ず、1行は1000バイト以内になるようにしてください。

なお、ユーザーが入力する本文の改行コードは、CRLFでもLFのみでも、どちらでも問題ありません。

*1 : あくまでも推奨なので超えても良い

*2 : 1000文字の制限は絶対にまもらなければならない

ダウンロードQdSimpleMail-PHP

2008/06/21 未分類 spok
改版履歴

最新バージョン

2008-06-21 0.1.0a.zip

ライセンス(License)

このPHPプログラム Qdmail はオープンソースであり、MIT Liceseでライセンスされています。
http://www.opensource.org/licenses/mit-license.php

改変、再配布、商用利用は自由に行えます。ライセンスに基づく限り、無料であり、貴方はどこにもお金を支払う必要はありません*1

このライセンスを守るのが難しい方は作者に連絡をとってください。
連絡先は、プロフィールに記載してあります。私は多くのスパムメールを受け取っているので、必ず、E-mailの"subject"には"Qdmail"の言葉を入れて下さい。

作者は、操作に関する質問はメールでは受け付けていません。質問のある方はこのサイトの適当な記事にコメントをつけることで行って下さい。ただし、作者の都合により、その質問には回答が寄せられないことがあります。

*1 : くれるというならいただきます