はしくれエンジニアもどきのメモ

情報系技術・哲学・デザインなどの勉強メモ・備忘録です。

mb_send_mail と mail 関数の違い[PHP]

mb_send_mail と mail 関数の違い

hostinger ではセキュリティ上 mb_send_mail関数が使えない 

mb_send_mailでメールが送信できません

ようなので、メモ。

mb_send_mail()関数

(PHP 4 >= 4.0.6, PHP 5)

mb_send_mail — エンコード変換を行ってメールを送信する

説明

bool mb_send_mail ( string $to , string $subject , string $message [, string $additional_headers = NULL [, string $additional_parameter = NULL ]] )

email を送信します。ヘッダと本文は mb_language() の設定に基づき変換、エンコードされます。 これは mail() のラッパー関数です。詳細は、 mail() を参照ください。

引用:PHP: mb_send_mail - Manual

通常使う場合は、自動でエンコーディングしてくれるので、mb_send_mail関数でいいかと。中でmail関数を呼んでいるようです。

mail()関数

(PHP 4, PHP 5)

mail — メールを送信する

説明

bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )

メールを送信します。

引用:PHP: mail - Manual

mail関数では、自動でエンコーディングをしてくれないので、日本語を使う場合文字化けが起きるようです。 しかし、以下のように書いたところ、hostingerでは文字化け無しでメールを送れました。

mb_language('Japanese');
mb_internal_encoding('UTF-8');
// mb_send_mail($to, $subject, $message);
mail($to, $subject, $message);

日本語のメールを送信する - メール送信(PEAR::Mail) - PEAR入門 では、mb_convert_encoding 関数を使って、手動でエンコーディングしてますが、必要ないのかな?いまいち上記の関数が効いているのか、hostinger ではphp.ini あたりで設定されているのかよくわかりませんが、文字化けなしで送れました。