【PHP入門】メールを送信する方法(mail/mb_send_mail)

こんにちは!フリーエンジニアのせきです。

PHPでは関数を使用することで、簡単にメールを送信することができます。この記事では、

  • mail関数の使用方法
  • mb_send_mail関数の使用方法
  • HTMLメールを送信する方法
  • CC、BCCを指定してメールを送信する方法
  • SMTP経由で送信する方法

といった基本的な内容から、応用的な内容に関しても解説していきます。今回はそんなメールを送信する方法について、わかりやすく解説します!

SMTP認証について

本編の内容に入る前にSMTP認証について触れておきます。記事の後半でも触れますが、SMTPはメール送信のためのプロトコルで、メール送信に使うサーバをSMTPサーバといいます。

現代的なメールサービスではSMTPサーバにSMTP認証というものが組み込まれており、PHPの組み込み関数のみでメールをやり取りするのは少々面倒な状態です。

この記事ではローカル環境のようなSMTP認証がかかっていない環境を想定してサンプルを提供していますが、もし現実の環境でPHPでメールの送受信を実装する際はPEARやQdmailといったライブラリを使うのが一般的です。

ライブラリの導入は紙幅の関係で紹介できませんが、興味のある方はPEARやQdmailで検索してみてください。

メールを送信する

ここではmail関数、mb_send_mail関数を使用して、メールを送信する方法について解説します。

mail関数とは

メールを送信するにはmail関数を使用します。mail関数は以下のように記述します。

引数について、順番に解説します。

  • 受信者
  • メールの受信者を指定します。指定できるのは、以下のような形式です。受信者が複数の場合は、カンマ区切りで指定します。

    [email protected]
    XXX<[email protected]>

  • タイトル
  • メールのタイトルを指定します。改行はできません。

  • 本文
  • メールの本文を指定します。改行する場合は、改行コードであるCRLF(\r\n)を使用します。各行の長さは70文字を超えてはいけません。

  • 追加ヘッダ
  • 「From」や「Cc」など、追加したいヘッダを指定します。複数のヘッダを追加する場合は、改行コードであるCRLF(\r\n)を使用します。「From」ヘッダは必須ですが、php.iniにデフォルト値を指定してある場合は、プログラムでは省略することができます。

  • 追加パラメータ
  • メール送信プログラムに追加したいオプションがある場合に使用します。mail関数は、メールの送信に成功すればTRUEを、失敗すればFALSEを返します。受信者に届いたかどうかではないので、注意してください。

mail関数を使用して、メールを送信するサンプルです。

受信者を「$to」、タイトルを「$subject」、メッセージを「$message」、Fromヘッダを「$headers」に入れ、mail関数に渡しています。これで指定した値で、メールが届きます。

mb_send_mail関数とは

mail関数でメールを送信すると、日本語が文字化けしてしまう可能性があります。mb_send_mail関数を使うと、日本語などのマルチバイト文字を扱ってメールの送信を行うことができます。mb_send_mail関数は以下のように記述します。

引数、戻り値は、mail関数と同じです。mb_send_mail関数で日本語のメールを送る場合は、最初に以下の2行を記述します。

mb_languageは言語を設定する関数です。mb_internal_encodingは文字のエンコードを指定します。

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

入力フォームを作成し、そこからメールを送信し、結果を画面に表示させるサンプルを作成します。送信先、メールのタイトル、本文を入力するmailform.htmlを作成します。

次にメールを送信するmail.phpを作成します。

mailform.htmlにアクセスし送信ボタンを押すと、メールが送信されます。

01

画像:メールフォーム

HTMLメールを送信する方法

メールの形式には、文章のみで構成されるテキストメールと、HTMLで作成し装飾文字や画像などを用いたHTMLメールがあります。

HTMLメールを送信するには、第四引数「$追加ヘッダ」にContent-typeヘッダを追加し、「text/html」を指定します。HTMLメールを送信するサンプルです。

$headersに”Content-type: text/html; charset=UTF-8″を追加しています。”charset=”の後には文字コードを指定します。ここでは世界共通で使われている文字コードであるUTF-8を指定しています。

$headersには既にFromヘッダが追加されており、複数のヘッダを追加する場合は改行コードであるCRLF(\r\n)を使用する必要があるので、FromヘッダとContent-typeヘッダを「”\r\n”」で連結しています。これでHTMLメールが届きます。

CC、BCCを指定する方法

CC、BCCを指定するには、第四引数「$追加ヘッダ」にCcヘッダ、Bccヘッダを追加します。CC、BCCを指定してメールを送信するサンプルです。

$headersに”Cc: [email protected]”と”Bcc: [email protected]”を追加しています。それぞれのヘッダは「”\r\n”」で連結しています。これでCC、BCCを指定したメールが届きます。

CCやBCCを複数指定したい場合は、以下のようにヘッダを追加します。

SMTP経由で送信する方法

SMTP(Simple Mail Transfer Protocol)とはメールを送信するプロトコルです。実際に使われている外部のSMTPサーバを使用することで、送信したメールが迷惑メールに分類されたり、スパムとしてブロックされたりすることを回避することができます。

SMTPの設定はphp.iniから変更することができます。php.iniの[mail function]部分の「SMTP」にSMTPサーバ名、「smtp_port」にポート番号を記述します。

このように設定すると、SMTPサーバ「smtp.xxxxx.com」を利用してメールが送信されます。

まとめ

今回はメールを送信する方法について解説しました。ショッピングサイトなどの構築では、メール機能が必須となってきますので、使い方をしっかり覚えましょう。メールを送信する方法を忘れてしまったら、この記事を思い出して下さい!

現役フリーランスエンジニアによる無料体験レッスン実施中!

もし、あなたが、

  • 経験、年齢、学歴に不安がある
  • 挫折しない学習方法が知りたい
  • アプリ開発で困っている
  • エンジニアの”生”の声が聞きたい!
  • 仕事獲得の仕方がわからない
  • エンジニアに転職したいが何をすればいいかわからない

など、プログラミング学習やキャリアのことでお困りであれば、まずは『無料体験レッスン』にお申し込み下さい。

あなたにとって、最適の解決策をご提案させていただきます。

詳しくは下の画像から詳しいサービス内容をご確認ください。

cta_mtm3

LINEで送る
Pocket

書いた人

せき

せき

フリーランスでWebシステム開発やゲーム開発をしています。
読者の方にプログラミングの面白さをお伝えしたいです。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説