PHPでメール送信するための方法を解説【初めてでもわかりやすく】

プログラミング 公開日: 更新日:
ブックマーク
PHPでメール送信するための方法を解説【初めてでもわかりやすく】
PHPでメール送信する方法を、初心者でもわかりやすいようにサンプルコードと共に解説しています。メール送信するための関数やメールフォームでの送信方法、SMTPについても説明しています。

PHPの開発業務で多いのがメール送信の処理を構築することです。特にサイト制作においてはほぼ必須の処理となります。
今回は、初心者の方にもわかりやすくサンプルコードを元に解説しますので、PHPでメール送信をしてみたい場合は一読してください。

PHPでメール送信する方法

PHPでメール送信する方法は大きく分けると「mail関数」と「mb_send_mail関数」の2種類あります。それぞれの書き方を見ていきましょう。

mail関数を使用する場合

mail関数はメールを送信するための関数でありフォーマットは mail(宛先, 件名, メッセージ, ヘッダ) です。サンプルコードで見てみましょう。

$to = "to@example.com";
$subject = "TEST";
$message = "This is TEST.\r\nHow are you?";
$headers = "From: from@example.com";
mail($to, $subject, $message, $headers);

宛先や送り主のメールアドレスは仮ですので、それぞれの環境に合わせて対応するようにしてください。本文で改行したい場合は \r\n(CRLF) を利用することで改行されます。なお、件名は改行できないので注意してください。
今回の例ではヘッダは From: を使っていますが、Cc:Bcc: なども指定できます。

mail関数の返り値はboolean(論理型)であり、メール送信に成功で true 、失敗で false を返します。これはメールが届いているかどうかの判定ではありません。あくまでも送信が完了されたかどうかですので注意しましょう。

mb_send_mail関数を使用する場合

mb_send_mail関数もmail関数同様、メールを送信するための関数です。フォーマットは mb_send_mail(宛先, 件名, メッセージ, ヘッダ) です。サンプルコードで見てみましょう。

$to = "to@example.com";
$subject = "TEST";
$message = "This is TEST.\r\nHow are you?";
$headers = "From: from@example.com";
mb_send_mail($to, $subject, $message, $headers);

基本的な書き方や返り値がbooleanであることなどを含めmail関数と同じです。では何が違うのでしょうか?

実はmb_send_mail関数はマルチバイトに対応されており、日本語での送信が可能なのです。
上記サンプルコードのままではできませんが、下記のコードをmb_send_mail関数よりも前に記入することで日本語の送信が可能となります。

mb_language("Japanese");
mb_internal_encoding("UTF-8");

mail関数でも良いのですが、日本語でのメール送信が主になることが想定される場合は、mb_send_mail関数の方を利用するようにしましょう。

複数の宛先にメールを送信する場合

宛先を複数にしたい場合は、mb_sendmail に渡す宛先にコンマ区切りで複数のアドレスを指定します。
上記の例に沿って書くと以下のようになります

$to = "to_1@example.com,to_2@example.com,to_3@example.com";

また、CcやBccで送信したい場合は以下のようにheaderに追記します。

$headers = 'From: from@example.com' . "\r\n";
$headers .= 'Cc: cc@example.com' . "\r\n";
$headers .= 'Bcc: bcc@example.com';

headerに複数指定する場合は、このように改行コードの \r\nで区切ります。
また、CcやBccで複数のメールアドレスと指定したい時は、宛先同様にコンマ , で区切ります。

メールフォームから送信する場合

サイト上でメールフォームを作成し、ユーザーが入力した情報を元にメールを送信する方法も覚える必要があります。例えば下記のようなフォームを作ったとします。

<html>
	<head>
		<meta charset="utf-8" />
	</head>
	<body>
		<form action="./test_mail.php" method="post">
	    	    <p>送り先</p><input type="text" name="to">
	    	    <p>件名</p><input type="text" name="title">
	    	    <p>メッセージ</p><textarea name="content" cols="60" rows="10"></textarea>
	    	    <p><input type="submit" name="send" value="送信"></p>
	  	</form>
	</body>
</html>

フォームを作成したらメールを送信するプログラムを作成しましょう。ファイル名は test_mail.php とします。
(メールフォームでtest_mail.phpをアクション指定しているため)

<html>
    <head>
        <meta charset="utf-8" />
    </head>
    <body>
    <?php
        mb_language("Japanese");
        mb_internal_encoding("UTF-8");

        $to = $_POST['to'];
        $title = $_POST['title'];
        $message = $_POST['message'];
        $headers = "From: from@example.com";

        if(mb_send_mail($to, $title, $message, $headers))
        {
            echo "メール送信成功です";
        }
        else
        {
            echo "メール送信失敗です";
        }
    ?>
    </body>
</html>

これでメールフォームからのメール送信が可能になりました。

PHPでHTMLメールを送信する方法

HTMLメールとは、装飾が施されたメールのことを指します。フォントや文字色の指定ができ、画像の挿入やレイアウト指定などHTMLサイトのようなメールを送れます。
使用する関数はmailもしくはmb_send_mailです。両関数の引数であるヘッダ部分にContent-typeを追加することで対応が可能です。
サンプルを見てみましょう。

$to = "to@example.com";
$subject = "HTML MAIL";
$message = "This is HTML MAIL";
$headers = "From: from@example.com";
$headers .= "\r\n";
$headers .= "Content-type: text/html; charset=UTF-8";
mb_send_mail($to, $subject, $message, $headers);

Content-type の後に text/html を入れることでHTMLメールになります。 charset=UTF-8 の対応もするようにしましょう。文字コードUTF-8は世界共通ですので、特定の場合以外はUTF-8で問題ありません。

Content-type以外にも、改行コードを入れている点もポイントです。BccやCcを追加した時と同様に、$headers に追加する場合は、\r\n(CRLF)を入れるルールとなっているので忘れずに対応しましょう。

SMTP経由でのメール送信がおすすめ

メール送信処理を作成する場合はSMTP経由がおすすめです。

そもそもSMTPとは?

SMTPは「Simple Mail Transfer Protocol」の略であり、簡易的なメール送信プロトコルを指します。メール送信する際にはプロトコルごとにルールが設けられており、SMTPはそのうちの一つです。

迷惑メールやスパム対策強化になる

SMTPサーバーを経由することのメリットは、迷惑メールやスパム対策強化になることです。
SMTPサーバーは多くのメール送信で利用されており、多くの場合はブラックリストに登録されていません。メールを受信する側としても不要なメールや攻撃的なメールを受け取りたくはないでしょう。SMTPサーバーをブラックリストに入れている可能性もありますが、信頼性が高いことで知られているため迷惑メールやスパム対策強化となります。

SMTP経由でメール送信するには?

SMTPの設定をするためには php.ini を編集する必要があります。

[mail function]
; http://php.net/smtp
SMTP = smtp.xxxxx.com
; http://php.net/smtp-port
smtp_port = 587

php.iniを開き、[mail function] のところで上記のように設定してみましょう。サンプルコードではSMTPの指定は仮となっています。利用可能なSMTPサーバーを指定してください。
smtp_port には587を入力しています。これはメール送信用のポート番号であり、SMTP-AUTH認証されることから信頼性が高いポートです。

以上のように php.ini を編集することでSMTP経由でのメール送信が可能となります。
php.iniの反映にはサーバーの再起動が必要なので、忘れないようにしましょう。

まとめ

サイト制作の多くはメール構築が必須!しっかり覚えましょう!

PHPでの開発業務では、メール送信はほぼ当たり前のように出てきます。今回は基本的な情報を元に解説してきましたので、しっかりと覚えて対応できるようにしましょう。
今回紹介したサンプルコードを自身で試してみることで理解度は急速に上がります。ぜひチャレンジしてください。

この記事のキーワードに関する勉強会・イベントを探す

TECH PLAYでは、ITエンジニア向けの勉強会・イベント情報を提供しています。

興味のある方はぜひご参加ください。

TECH PLAYでは、ITに関わる様々なイベント・勉強会・講演会・交流会・カンファレンス・セミナーなどの情報を集約し掲載しています。

テクノロジーと共に成長しよう、
活躍しよう。

TECH PLAYに登録すると、
スキルアップやキャリアアップのための
情報がもっと簡単に見つけられます。

面白そうなイベントを見つけたら
積極的に参加してみましょう。
ログインはこちら

タグからイベントをさがす