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

プログラミング
PHPでメール送信をしてみたいと思ったら今回の内容を元に理解とチャレンジをしてください。サンプルコードを作成し初心者でも可能な限りわかりやすく解説しました。メール送信するための関数やメールフォームでの送信方法、SMTPについても説明していきます。
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関数の方を利用するようにしましょう。

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

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

<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 = "<html><body><h1>This is HTML MAIL</h1></body></html>";
$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以外にも、改行コードを入れている点もポイントです。$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での開発業務では、メール送信はほぼ当たり前のように出てきます。今回は基本的な情報を元に解説してきましたので、しっかりと覚えて対応できるようにしましょう。
今回紹介したサンプルコードを自身で試してみることで理解度は急速に上がります。ぜひチャレンジしてください。


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

TECH PLAYでは、ITエンジニア向けの勉強会・イベント情報を提供しています。
興味のある方はぜひご参加ください。


おすすめのコラム