.NETエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnet.NETナビ
  2. .NETコラム
  3. プログラミング言語
  4. PHP
  5. PHPでのメール送信方法|mail関数とmb_send_mail関数、2つのやり方について解説

PHPでのメール送信方法|mail関数とmb_send_mail関数、2つのやり方について解説

  • PHP
  • プログラミング言語
公開日時:   更新日時:
PHPでのメール送信方法|mail関数とmb_send_mail関数、2つのやり方について解説
この記事でわかること
    基本情報技術者試験の試験対策はこちら>>
    システム
    エンジニア
    PHPで関数を使ってメールを送る方法について教えていただけますか。
    プロジェクト
    マネージャー
    PHPで関数を使ってメールを送るにはmail関数とmb_send_mail関数があります。環境依存文字が原因で文字化けしてしまう際の対応法もご紹介ししましょう。

    PHPでのメール送信とは?


    PHPを用いてできることとして「メール送信」があり、PHPにはメール送信するための関数が用意されています。

    主に企業などのホームページに設置されているお問い合わせフォームやメールフォームは、このPHPを用いたメール送信プログラムにより送信されていることがほとんどと考えてもよいでしょう。

    今回はそのPHPでメール送信する方法について解説していきます。

    PHPでメールを送る方法

    PHPでメールを送信する方法として、代表的な関数は2つあります。

    方法1:mail関数
    方法2:mb_send_mai関数
    ※こちらはエンコード変換機能を搭載しています。

    関数【mail】とは?

    PHPのメール送信関数のmailは、以下のようになります。

    このmail関数のカッコ内にはstring $toなどが入っています。初心者の方でコードの見方がわからない方は、まずここで躓いてしまうことも考えられますので解説します。

    string $toとはstringが文字列を表しており、文字列型の$toというものが入ります。

    それぞれのパラメータの解説は以下になります。
    ・$to
    メールを送信したいアドレスが入ります。

    ・$subject
    メールの件名が入ります。

    ・$message
    メールの本文が入ります。

    改行も含めた文字列を代入できますが、一行あたりの長さは70文字未満でなければなりません。そのため日本語の場合は35文字以下になります。

    ・$additional_headers (オプション)
    通常のメールのようにFrom、Cc、Bccなどを代入できます。PHP7.2.0以降はstring型とarray型どちらでも構いません。それ以前はstring型のみになります。

    ・$additional_params (オプション)
    メール送信プログラムは、設定オプションであるsendmail_pathにより設定され、メール送信のプログラムに渡す際に、追加のフラグをコマンドラインオプションとして使用できます。

    ※オプションのパラメータは定義されていなくても動作します。

    実際に使用する場合のコードは以下のようになります。

    この関数はbool型の関数になるので送信が正常にできるとtrue、できなければfalseが戻り値となります。

    また、この関数では日本語を送信した際に文字化けを起こしてしまう可能性があります。そのため日本語を扱うメール送信プログラムを作成する場合は次の章の【mb_send_mail】の使用をお勧めします。

    関数【mb_send_mail】とは

    次に関数【mb_send_mail】は、以下のようになります。

    それぞれのパラメータの解説は以下になります。
    ・$to
    メールを送信したいアドレスが入ります。

    ・$subject
    メールの件名が入ります。

    ・$message
    メールの本文が入ります。

    ・$additional_headers (オプション)
    通常のメールのようにFrom、Cc、Bccなどを代入できます。複数のヘッダを追加する場合は改行コードを”\r\n”とし区切ります。

    ・$additional_params (オプション)
    この関数を利用しメール送信する場合に正しいReturn-Pathを設定するために利用すると便利です。

    ※オプションのパラメータは定義されていなくても動作します。

    先程この関数はエンコード変換機能を利用できると解説しました。

    この関数では事前にmb_languageとmb_internal_encodingで指定された文字コードで$subjectと$messageを送信できます。

    実際のコードは以下のようになります。

    こちらもbool型の関数になるので送信が正常にできるとtrue、できなければfalseが戻り値となります。

    しかし、このままのコードでは環境依存文字と呼ばれる「髙」や「﨑」などの文字が実際にメールで送信された場合に文字化けしてしまいます。

    次の章では、この環境依存文字を文字化けさせずにメール送信する方法を解説します。

    mb_send_mailで環境依存文字を送信する方法は?

    PHPで用意されている【mb_send_mail】では簡単にメールを送信することを実装できますが、先程の例のような環境依存文字や半角カナが文字化けして?になってしまいます。

    この対処法としてISO-2022-JP-MSでエンコードします。

    先程のコードに付け加えると以下のようになります。

    ここではmb_send_mail内で$subjectと$messageをエンコードします。
    $subject部分では【mb_encode_mimeheader】
    $message部分では【mb_convert_encoding】
    を利用しています。

    システム
    エンジニア
    環境依存文字の文字化けにはエンコードが必要なのですね。
    プロジェクト
    マネージャー
    その通りです。mb_send_mail関数でメール送信すると文字化けに対処できます。

    PHPでのメール送信のまとめ

    PHPでメール送信する方法としては以下の2つの方法があります。
    ・mail関数
    ・mb_send_mail関数

    日本語を主に扱うのであればmb_send_mail関数でメール送信することで、文字化けに対処できます。

    FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
    株式会社オープンアップシステムロゴ

    株式会社オープンアップシステムはこんな会社です

    秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。

    • 充実した研修制度

      充実した研修制度

      毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。

    • 資格取得を応援

      資格取得を応援

      スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    株式会社オープンアップシステムに興味を持った方へ

    株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    株式会社オープンアップシステムへのご応募はこちら↓
    株式会社オープンアップシステムへのご応募はこちら↓

    新着案件New Job