PHPでメール送信するための方法を解説【初めてでもわかりやすく】
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エンジニア向けの勉強会・イベント情報を提供しています。
興味のある方はぜひご参加ください。