PHPでメールを送信するには?メール関数の構文や使い方を解説
thumb_phpmail_01
PHPでメールを送信するには?メール関数の構文や使い方を解説
アンドエンジニア編集部
2024.06.17
この記事でわかること
PHPのメール関数は、mail関数やmb_send_mail関数が提供されます
mb_send_mail関数は、マルチバイトに対応し、日本語を扱うことができます
受信側のセキュリティ強化に対応するため、迷惑メールやスパムと認識されない設定が必要です

PHPでメールを送信するには

img_phpmail_01

PHPは、ウェブアプリを行う際に用いるスクリプト言語です。PHPの結果を動的にウェブに反映させることができます。この処理結果やステータスなどを通知する際に、メール機能を用いることができます。ここでは、PHPで提供するメール機能の構文や用法について、解説します。

【参考】:PHP 【参考】:PHP マニュアル 【参考】:PHP マニュアル: メール

PHPでできること7選!作品例やアプリ、将来性についても解説
PHPの入門として概要やプログラムの記載方法、文法について解説

PHPのメール関数を使うには

img_phpmail_02

PHPは、メール関数がコールされるとsendmailのバイナリファイルに処理を引き渡します。そのためPHPのメール関数を使うには、sendmailバイナリの準備とアクセスが必要です。初期設定を行うphp.iniファイルを修正することで、Qmailなどにパスを差し換えることもできます。

【参考】:PHP マニュアル: メール 【参考】:PHP マニュアル: メール インストール/設定

プログラミングの関数とは?役に立たない?学び方と実務で役立つスキル

PHPで日本語のメールを送信するには

PHPで日本語のメールを送信するには、マルチバイトに対応するメール関数mb_send_mailが提供されます。mb_language関数の指定に従って、メッセージがエンコード処理され、送信されます。使い方は、通常のメール関数を学んでから解説します。

【参考】:PHP マニュアル: mb_send_mail 【参考】:PHP マニュアル: mb_language

mail関数の構文と用法

mail関数の構文と用法は、次の通りです。

mail(送信宛先, メールタイトル, 送信メッセージ[, 追加ヘッダ[, 追加パラメータ]]):

引数は、string型です。追加ヘッダは、stringまたはstringの配列が利用できます。それぞれの引数は、次の意味を持ちます。

送信宛先 メールの送信先を通常のメール送信宛先の書式RFC 2822に従って記述します。複数宛先がある場合は、カンマ(”,”)で区切ります。例えば、”user@hostname.com”や”user1@hostname.com, user2@hostname.com”などと指定します。

メールタイトル メールタイトルは、メールの表題でRFC 2047に従います。改行コードを入れずに1行で記述します。

送信メッセージ 送信メッセージを記述します。改行コードは、”\r\n”を追加してください。行の長さは70文字が上限です。

追加ヘッダ From、Cc、Bccなどの追加に使用します。Fromヘッダは、必ず必要です。この追加ヘッダにFromを入れるか、php.iniにデフォルト設定の値を入れておきます。

追加パラメータ 追加パラメータは、sendmailなどのメール送信プログラムに引数として渡されます。

【参考】:PHP マニュアル: メール関数 mail

mail関数の使い方

mail関数を使うには、先ほどの文字列を引数として用います。送信宛先を ”$to”、メールタイトルを ”$subject”、 メール本文である送信メッセージを ”$message”とします。

// 引数を設定する
$to        = ‘user@hostname.com’;
$subject   = ‘Title’;
$message   = ‘Hello World’;
$headers   = ‘From: myname@example.net’;
// mail関数をコールする
mail($to, $subject, $message, $headers);

送信メッセージの “$message”を複数行にする場合は、”Hello\r\nWorld”などのようにCRLFを追加すれば行の分割ができます。CRLFを用いる場合は、シングルクォーテーションではなくダブルクォーテーションで解釈させます。追加ヘッダの区切りも同様にCRLFを追加します。

【参考】:PHP マニュアル: メール関数 mail

mb_send_mail関数の構文と用法

mb_send_mail関数はmail関数のラッパのため、構文と用法はmail関数と同じです。違いはマルチバイトに対応する点で、日本語を扱う場合はmb_send_mail関数を用います。

mb_send_mail(送信宛先, メールタイトル, 送信メッセージ[, 追加ヘッダ[, 追加パラメータ]]):

言語の設定は、mb_language関数を用います。内部文字のエンコーディングを明示的に行う場合は、合わせてmb_internal_encoding関数を用います。上記を組み合わせて以下のように、表します。

mb_language(言語):
mb_internal_encoding(文字エンコーディング):
mb_send_mail(送信宛先, メールタイトル, 送信メッセージ[, 追加ヘッダ[, 追加パラメータ]]):

【参考】:PHP マニュアル: mb_send_mail 【参考】:PHP マニュアル: mb_language 【参考】:PHP マニュアル: mb_internal_encoding

mb_send_mail関数の使い方

mb_send_mail関数の使い方は、mail関数と同じです。日本語など多言語でメール送信するには、言語を指定するmb_language関数と文字エンコーディングを行うmb_internal_encoding関数をあらかじめコールし、マルチバイトの設定を行う必要があります。

// 言語設定の引数を設定する
$language= ‘Japanese’;
// 言語を設定する
mb_language($language);
// エンコーディングの引数を設定する
$encoding= ‘UTF-8’;
// エンコーディングを設定する
mb_internal_encoding($encoding);
 
// メールで必要な引数を設定する
$to        = ‘user@hostname.com’;
$subject   = ‘Title’;
$message   = ‘Hello World’;
$headers   = ‘From: myname@example.net’;
// mb_send_mail関数をコールする
mb_send_mail($to, $subject, $message, $headers);

【参考】:PHP マニュアル: mb_send_mail 【参考】:PHP マニュアル: mb_language 【参考】:PHP マニュアル: mb_internal_encoding

PHPメール関数の確認事項

PHPのメール関数を使ってメール送信を行う場合ですが、メール送信のテストを行うとGmailなどの受取先のドメイン認証でエラーとなる場合があります。Gmailはスパム対策などでセキュリティが厳しくなっており、このような症状が現れます。

まずは、送信元となる”From:”が実際の送信元のドメインと一致しているか確認すると良いでしょう。解決しない場合は、なりすまし対策のSPFレコードの追加により、Gmailでも認証をパスすることができます。詳細は以下のリンクを確認しましょう。

【参考】:インターネット協会 SPF(Sender Policy Framework)

PHPMailerを利用する

PHPのメール関数は手軽に利用できますが、認証でエラーとなり送信できない場合があります。Gmailの認証エラーなどが、認証エラーの例です。その場合には、SMTP認証を用いるライブラリPHPMailerを用いるのが良いでしょう。PHPMailerは、WordPressなどに用いられ、日本語に対応します。

使い方は、mb_internal_encodingに代えて、SMTPのリレーホスト名やSMTP認証パスワードなどをPHPMailerの引数に渡します。外部のSMTPサーバを指定することで、送信メールが迷惑メールやスパムと認識されなくなります。公式サイトには、Gmailのサンプルコードも公開されています。

【参考】:Github: PHPMailer 【参考】:Github: PHPMailer gmail.phps

PHPでメールを受信するには

PHPでメールを受信するには、IMAP関数のimap_fetch_overviewやimap_fetchbodyを使ったり、Mailparse関数でファイルのパ―スやメッセージのデコードなどで対応します。メール受信は送信よりも複雑な処理が必要ですので、メール送信がうまく実行できてから実装すると良いでしょう。

【参考】:PHP マニュアル: IMAP、POP3 および NNTP 【参考】:PHP マニュアル: Mailparse

PHPのメール機能は簡単だがセキュリティ面を考慮する必要もある

img_phpmail_03

PHPのメール機能はシンプルな構造で、簡単にメール送信することができます。開発中のコード確認テストなどで利用する場合は問題ありませんが、商用リリースする場合は、メール送信先の認証エラーなどに注意を払う必要があります。

メール関数を使用する場合は、迷惑メールやスパムと認識されないように、設定を十分に行いましょう。

PHPに将来性はある?1つの言語にこだわらず多言語の習得を
PHPの習得は難しい?エンジニア経験者でも苦戦する理由を解説
PHPのおすすめ本13選!入門レベルからさらに学べる学習本まで解説
気になる人のXをフォローしよう!
公式LINE
公式YouTube
マイナビITエージェント

編集部オススメコンテンツ

Sponsored
【年収±診断】6つの質問に答えて、真の市場価値をチェック!
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

お問い合わせ・情報提供
はじめて転職される方へ
SE・システムエンジニア(IT/通信/インターネット) 求人一覧

編集部おすすめコンテンツ

Sponsored
【年収±診断】6つの質問に答えて、真の市場価値をチェック!
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

Powered by マイナビ AGENT