[{"data":1,"prerenderedAt":323},["ShallowReactive",2],{"$ft6jtkd6xhw3c":3,"$f23gdlojcd312x":263},{"featured":4,"latest":129,"categories":227},[5,14,27,37,48,56,66,76,86,96,106,114,122],{"slug":6,"title":7,"date":8,"excerpt":9,"image":10,"categories":11},"custom-database-tables","Custom DataBase Tables","2015-11-24T02:29:34","You can create the new own table freely in the your WordPress database via this plugin. Then, you can make the management of table or (as view or entry or edit) data in a simple user interface.\\nAlso,","\u002Fassets\u002Fuploads\u002F2016\u002F02\u002Fcdbt-overview.png",[12],{"slug":13,"name":7},"cdbt",{"slug":15,"title":16,"date":17,"excerpt":18,"image":19,"categories":20},"10_php_tips_for_developers","PHP開発者が心得ておくべき10の鉄則","2016-01-11T18:38:09","PHPだけに限った話ではないが、プログラミングを行うに当たって、心得て、準備しておくと失敗が劇的に減る事柄をまとめてある良い記事を見つけたので、私なりの解釈で意訳しつつ、経験則を踏まえてあらためてまとめてみた。 オリジナ…","\u002Fassets\u002Fuploads\u002F2016\u002F01\u002Feyecatch-php-10-tips.jpg",[21,24],{"slug":22,"name":23},"column","コラム",{"slug":25,"name":26},"development","開発関連",{"slug":28,"title":29,"date":30,"excerpt":31,"image":32,"categories":33},"jquery-timeline-v1","2種類の横型タイムラインを簡単に作成できる「jQuery.Timeline」をリリース","2017-05-29T14:55:46","現在開発しているサービスで利用するべく、横型タイムラインを生成できるjQueryプラグインを自作したので、そこだけ単独でリリースしてみた。 ソースコード等はGitHubの方にリリースしてあるので、興味のある方は、そち…","\u002Fassets\u002Fuploads\u002F2017\u002F05\u002Fjquery_timeline_image.png",[34],{"slug":35,"name":36},"jqtl","jQuery.Timeline",{"slug":38,"title":39,"date":40,"excerpt":41,"image":42,"categories":43},"optimize-browser-cache-of-static-resources","更新されたJS、CSS、画像のみブラウザキャッシュを破棄して読み込ませる","2018-01-31T15:47:47","WEBサービスの保守や開発をやっていると、JavaScriptやスタイルシート、画像などの静的リソースを更新した際、しばしば「確認したけど、更新されてないよ」とか云われて、「ブラウザのキャッシュを消してからもう一度見て…",null,[44,47],{"slug":45,"name":46},"codes","コード集",{"slug":25,"name":26},{"slug":49,"title":50,"date":51,"excerpt":52,"image":53,"categories":54},"jquery-timeline","jQuery.Timeline version2 – full documentation","2019-03-04T20:40:48","Plugin Overview The jQuery.Timeline plugin provides you two types of the horizontal timeline. You can create a…","\u002Fassets\u002Fuploads\u002F2019\u002F03\u002Fjquery.timeline_v2.jpg",[55],{"slug":35,"name":36},{"slug":57,"title":58,"date":59,"excerpt":60,"image":61,"categories":62},"released-the-sloth","Released the Sloth of mobile-first CSS micro framework!","2019-04-16T18:04:25","I released the “Sloth” that is mobile-first CSS micro framework. I have long used frontend framewo…","\u002Fassets\u002Fuploads\u002F2019\u002F04\u002Fsloth_doc_head.png",[63],{"slug":64,"name":65},"sloth","Sloth",{"slug":67,"title":68,"date":69,"excerpt":70,"image":71,"categories":72},"challenge-to-conceal-the-wordpress-site","WordPressサイトを徹底的に秘匿化する","2020-02-02T23:59:58","私は自分の個人サイトをはじめ、仕事でもWordPressサイトを運用している。WordPressは気軽にサイトを立ち上げられてカスタマイズも簡単な、素晴らしいオープンソースなのだが、世界中で使われまくっているその知名度…","\u002Fassets\u002Fuploads\u002F2020\u002F02\u002Fshutterstock_1878005929.jpg",[73],{"slug":74,"name":75},"wordpress","WordPress関連",{"slug":77,"title":78,"date":79,"excerpt":80,"image":81,"categories":82},"what-is-forkor","Made a shortened URL app called Forkor","2020-07-07T22:27:01","What’s Forkor? Forkor is a service that provides a shortened URL feature that allows you to redirect any…","\u002Fassets\u002Fuploads\u002F2020\u002F07\u002Fforkor.png",[83],{"slug":84,"name":85},"forkor","Forkor",{"slug":87,"title":88,"date":89,"excerpt":90,"image":91,"categories":92},"manual-about-svg-japan","インタラクティブな日本地図を生成するJSプラグイン「SVG Japan」","2020-11-16T21:19:58","各都道府県をそれぞれ選択・クリック可能なインタラクティブな日本地図を生成するネイティブJavaScript建てのプラグイン「SVG Japan」を作ったので、その紹介と使い方をまとめておく。ちなみにソースコードはgit…","\u002Fassets\u002Fuploads\u002F2020\u002F11\u002Fsvg-japan.png",[93],{"slug":94,"name":95},"svg-japan","SVG Japan",{"slug":97,"title":98,"date":99,"excerpt":100,"image":101,"categories":102},"wp-ignitor-plugin-to-conceal-wordpress-site","WordPressサイトを秘匿化するプラグイン「WP Ignitor」","2021-01-19T15:28:21","以前「WordPressサイトを徹底的に秘匿化する」という記事で、WordPress建てのサイトを秘匿化する方法を取り上げたのだが、あれをサイト構築時に毎度実施するとなるととても労力が必要であった。そこで、もっとお手軽…","\u002Fassets\u002Fuploads\u002F2021\u002F01\u002Fbanner-1554x500-1.png",[103],{"slug":104,"name":105},"wp-ignitor","WPイグナイタ",{"slug":107,"title":108,"date":109,"excerpt":110,"image":111,"categories":112},"tastewp","無料でWordPressサイトを複数作成できるWEBサービス「TasteWP」","2021-03-25T20:21:59","私が日本語翻訳に協力しているWEBサービス「TasteWP」について紹介しようと思う。 https:\u002F\u002Ftastewp.com このサービス、サインアップすることなく無料で自分用のWordPressサイトを作れるとい…","\u002Fassets\u002Fuploads\u002F2021\u002F03\u002FTasteWP_screenshot.png",[113],{"slug":74,"name":75},{"slug":115,"title":116,"date":117,"excerpt":118,"image":119,"categories":120},"monster-hunter-rise-skill-simulator","モンハンライズのスキルシミュレータを作ってみた！","2021-06-28T20:24:52","コラムで連載していたNintendo Switch版『モンスターハンターライズ』のスキルシミュレータ開発がやっと一段落して一通り完了した。いやぁ、記事書きながら同時並行で開発すると思っていた以上に時間がかかるもんだなぁ…","\u002Fassets\u002Fuploads\u002F2021\u002F06\u002Fmhrss_v100.png",[121],{"slug":25,"name":26},{"slug":123,"title":124,"date":125,"excerpt":126,"image":42,"categories":127},"comparison-of-javascript-date-libraries","JavaScriptの日時ライブラリを比較してみた","2021-07-28T22:39:19","ネイティブJavaScriptで日時を取り扱う場合、ビルトインされているDateオブジェクトを使うことになるのだが、このDateオブジェクトは取り扱いにクセが多く、直感的に日時を操作できない点でも有名である。そこで、専…",[128],{"slug":25,"name":26},[130,141,153,165,175,184,192,195,198,206,213,220],{"slug":131,"title":132,"date":133,"excerpt":134,"image":135,"categories":136},"pulllog_launched","ガチャ履歴を記録・分析できるWebサービス「PullLog」","2025-08-22T13:05:30","このたび、新しい個人開発サービスとして 「PullLog（プルログ）」 をリリースした。 URLはこちら https:\u002F\u002Fpulllog.net PullLogとは？ PullLogは、ソーシャルゲームのガチャ履歴を記録…","\u002Fassets\u002Fuploads\u002F2025\u002F08\u002Fpulllog_stats_jp.png",[137,140],{"slug":138,"name":139},"industries","プロダクト",{"slug":25,"name":26},{"slug":142,"title":143,"date":144,"excerpt":145,"image":146,"categories":147},"mockapi-php-openapi-schema-generation","モックAPIのレスポンスから OpenAPI 3.0 スキーマを自動生成するPHPツール","2025-04-17T09:31:52","私自身がそうなのですが、OpenAPI仕様書を毎回手作業で書いていて「面倒だな」と思ったことはありませんか？ そんな（私と）あなたにぴったりのツールがあります。 レスポンスの例さえ用意すれば、OpenAPI 3.0 スキ…","\u002Fassets\u002Fuploads\u002F2025\u002F04\u002Fswaggerui-preview.png",[148,151,152],{"slug":149,"name":150},"mockapi-php","MockAPI-PHP",{"slug":138,"name":139},{"slug":25,"name":26},{"slug":154,"title":155,"date":156,"excerpt":157,"image":158,"categories":159},"ambient_playlist_customize","Ambientでメメントモリのラメントプレイヤーを作る","2023-11-30T17:32:39","「Ambient」の最新バージョン 1.2.0で実装した「疑似フェーダー」機能を使って、ソーシャルゲーム「メメントモリ」のYouTube公式チャンネルで公開されているMVを集約したラメント専用プレイヤーを作ってみた。 ラ…","\u002Fassets\u002Fuploads\u002F2023\u002F11\u002Fambient_mememori_1.png",[160,163,164],{"slug":161,"name":162},"ambient","Ambient",{"slug":138,"name":139},{"slug":25,"name":26},{"slug":166,"title":167,"date":168,"excerpt":169,"image":170,"categories":171},"released_ambient_demo_version","Ambientメディアプレイヤーのクラウド版デモを公開","2023-11-22T13:47:36","つい先日「Ambient」の最新バージョン 1.1.0をリリースして、それに合わせてクラウド版デモサイトも公開してみた。 なお、クラウド版デモでローカルのホストコンピュータのメディアを再生するには、そのメディアファイルも…","\u002Fassets\u002Fuploads\u002F2023\u002F10\u002FAmbientMediaPlayer-typologo.png",[172,173,174],{"slug":161,"name":162},{"slug":138,"name":139},{"slug":25,"name":26},{"slug":176,"title":177,"date":178,"excerpt":179,"image":170,"categories":180},"ambient-media-player","YouTubeと自分のPC内メディアを同時に再生できるメディアプレイヤーを作ってみた","2023-10-20T00:00:25","私はよくPCで何か作業をするときには音楽を垂れ流していることが多い。 そういう時にかける曲は、手持ちのアルバムCD等からPCに取り込んだ音源だったり、さらにはYouTubeの動画だったりとメディアや再生環境がバラバラだ。…",[181,182,183],{"slug":161,"name":162},{"slug":138,"name":139},{"slug":25,"name":26},{"slug":185,"title":186,"date":187,"excerpt":188,"image":189,"categories":190},"what-is-the-sunorhc","Sunorhc is a date-time library for JavaScript","2021-08-25T22:55:55","Sunorhc is a lightweight library for handling dates and times for JavaScript. The library wraps a native JavaS…","\u002Fassets\u002Fuploads\u002F2021\u002F08\u002Fshutterstock_1091212919_resized.jpg",[191],{"slug":25,"name":26},{"slug":123,"title":124,"date":125,"excerpt":126,"image":42,"categories":193},[194],{"slug":25,"name":26},{"slug":115,"title":116,"date":117,"excerpt":118,"image":119,"categories":196},[197],{"slug":25,"name":26},{"slug":199,"title":200,"date":201,"excerpt":202,"image":203,"categories":204},"mhrise-skill-simulator-creation-chapter-12","モンスターハンターライズのスキルシミュレータを作ってみる！ 第12回","2021-06-21T13:11:46","今回は「マイセット登録」と護石データの「エクスポート／インポート」機能の追加をしていく。折り良く（悪く？）「FF7リメイク・インターグレード」や「FORTNITEシーズン7」が出たこともあって、そっちをプレイしてたらこ…","\u002Fassets\u002Fuploads\u002F2021\u002F04\u002Fb6ca09e9a7f6faf27641f62dabe64c6ff97b4f326aa478379e3c112aa28eb9ab.jpg",[205],{"slug":22,"name":23},{"slug":207,"title":208,"date":209,"excerpt":210,"image":203,"categories":211},"mhrise-skill-simulator-creation-chapter-11","モンスターハンターライズのスキルシミュレータを作ってみる！ 第11回","2021-06-07T14:52:31","さて、今回はユーザー個別データの管理部分を開発していく予定だが、まずその前にやっておくことがある。 新スキル「風雷合一」に対応する Ver.3.0の大型無料アップデートで追加された新スキルに「風雷合一」というのがある…",[212],{"slug":22,"name":23},{"slug":214,"title":215,"date":216,"excerpt":217,"image":203,"categories":218},"mhrise-skill-simulator-creation-chapter-10","モンスターハンターライズのスキルシミュレータを作ってみる！ 第10回","2021-06-02T00:29:10","今回は、護石管理画面の作成だ。この護石管理では、ユーザーごとに護石の登録を行う機能と、登録した護石を削除する機能を持つ仕様になる。この画面から登録した護石データはデータベースに格納するので、フロントエンド側からのリクエス…",[219],{"slug":22,"name":23},{"slug":221,"title":222,"date":223,"excerpt":224,"image":203,"categories":225},"mhrise-skill-simulator-creation-chapter-9","モンスターハンターライズのスキルシミュレータを作ってみる！ 第9回","2021-05-22T23:56:27","さて、今回はVuexによるデータ・キャッシュの実装だ。一度データベースから読み込んだデータをフロントエンド側で再利用可能なストアに格納することで、データベースへの接続回数を減らしてシステム負荷を下げるとともに、UX的な…",[226],{"slug":22,"name":23},[228,230,232,236,238,239,240,241,242,244,247,248,250,252,254,258,261],{"slug":161,"name":162,"count":229},3,{"slug":13,"name":7,"count":231},7,{"slug":233,"name":234,"count":235},"csnp","Custom Sticky Notes",2,{"slug":84,"name":85,"count":237},1,{"slug":35,"name":36,"count":229},{"slug":149,"name":150,"count":237},{"slug":64,"name":65,"count":237},{"slug":94,"name":95,"count":237},{"slug":74,"name":75,"count":243},37,{"slug":245,"name":246,"count":237},"wpqt","WP Qiita",{"slug":104,"name":105,"count":237},{"slug":22,"name":23,"count":249},29,{"slug":45,"name":46,"count":251},16,{"slug":138,"name":139,"count":253},5,{"slug":255,"name":256,"count":257},"lifelog","ライフログ",64,{"slug":259,"name":260,"count":235},"uncategorized","未分類",{"slug":25,"name":26,"count":262},45,{"type":264,"post":265},"post",{"slug":266,"title":267,"date":268,"excerpt":269,"image":42,"categories":270,"modified":272,"html":273,"tags":274,"related":292,"prev":312,"next":320},"tips-of-sending-emails-that-includes-multibyte-strings-on-php","PHPで日本語のメールを送信する時のおさらい","2020-05-17T22:23:28","久々のおさらいシリーズ。 最近、仕事で単発のメールフォームを作ったのだが、メール送信周りの処理をスクラッチしたところ、受信するメーラーによって文字化けしたり、迷惑メール化しちゃったりと結構色々大変だったので、そのノウ…",[271],{"slug":25,"name":26},"2020-05-17T22:46:24","\u003Cp>　久々のおさらいシリーズ。\u003C\u002Fp>\n\u003Cp>　最近、仕事で単発のメールフォームを作ったのだが、メール送信周りの処理をスクラッチしたところ、受信するメーラーによって文字化けしたり、迷惑メール化しちゃったりと結構色々大変だったので、そのノウハウをまとめておこうかと思った次第。\u003Cbr \u002F>\n　まぁ、基本的に\u003Cstrong>送信時のメールヘッダを「これでもか！」ってぐらい念入りに設定してあげるのがトラブル起こさない秘訣\u003C\u002Fstrong>である。横着して簡素なメールヘッダにすると、たいていどこかでトラブルが起きるんだよね（苦笑）\u003C\u002Fp>\n\u003Ch2>PHPで日本語メールを送るなら\u003Ccode>mb_send_mail()\u003C\u002Fcode>関数を使う\u003C\u002Fh2>\n\u003Cp>　日本語などのマルチバイト文字列が件名や本文に含まれるメールを送信する場合は、\u003Ccode>mb_send_mail()\u003C\u002Fcode>関数を使うのが安心である。この関数は\u003Ccode>mail()\u003C\u002Fcode>のラッパーで、実体である\u003Ccode>mail()\u003C\u002Fcode>関数がメール送信処理を行う前に件名や本文を自動でエンコードしてくれる。いわゆるマルチバイト文字列フィルター付きのメール送信関数と云える。\u003Cbr \u002F>\n　この関数を実行する前に、\u003Ccode>mb_language()\u003C\u002Fcode>関数で使用言語を指定し、\u003Ccode>mb_internal_encoding()\u003C\u002Fcode>で内部エンコードを指定しておけば、その指定に沿った言語セットとエンコード方式でメールのマルチバイト文字を自動変換してくれるので、件名や本文などを個別にエンコード処理するといった手間や処理ミスから解放されるので、心穏やかにメール送信処理を組めるようになるのだ。\u003Cbr \u002F>\n　あと、多言語対応システムでメールを送信する場合に、言語や文字コードを変数化して切り替えることが容易なので、スッキリした汎用的なコードが書けるというメリットもある。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">mb_language\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'Japanese'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">mb_internal_encoding\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'UTF-8'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">mb_send_mail\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $send_to, $subject, $body, $headers );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　こんな風に使うのが一般的だ。\u003C\u002Fp>\n\u003Ch2>メールヘッダの一覧\u003C\u002Fh2>\n\u003Cp>　必要最小限のメールヘッダ定義だけでメール送信を行うと、受信するメーラーによって文字化けやら迷惑メールフィルタに引っかかったりと様々なケースが発生する。開発していると、動作検証するメーラーはPCのGmailとスマホのメーラーぐらいまでと、そこまで数多くのメーラーでの受信確認までは手が回らない。そのため、それら限定されたメーラー群では不具合が出なかったのでリリースしてみたものの、実際運用したら、やれこのメーラーだと文字化けした、このメーラーだと迷惑メールに分類されてしまっただのというケースがしばしば発生するのだ。\u003Cbr \u002F>\n　そういう出戻りを極力避けるためにも、メールヘッダはきちんと念入りに設定しておくのが最善だ。たいていメール送信における問題は、メールヘッダの設定や調整でほぼトラブルシュートができるので、先んじてきちんと設定しておくのが重要になってくる。\u003C\u002Fp>\n\u003Cp>　まずは、メールヘッダの種類と設定値をここで抑えておくことにする。コーディングの基本は「\u003Cstrong>理解して\u003C\u002Fstrong>」使うことが何よりも重要なのだ。\u003Cbr \u002F>\n　下記一覧の「必要度」が「〇」なものがメールを送る際には設定しておくべきヘッダだ。「△」はなるべく設定しておいた方が良い必要度で、「-」は宛先のメール種別や転送を伴うか等必要に応じて使うヘッダとなる。まぁ、最低限「〇」と「△」のメールヘッダはすべて設定するようにしておけば、そうそうトラブルは起きないはずだ。\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth align=\"left\">ヘッダ名\u003C\u002Fth>\n\u003Cth align=\"left\">設定値の内容\u003C\u002Fth>\n\u003Cth align=\"left\">補足\u003C\u002Fth>\n\u003Cth align=\"center\">必要度\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>MIME-Version\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">英数字以外の文字や画像を取り扱える電子メールであることを示すMIMEのバージョン番号\u003C\u002Ftd>\n\u003Ctd align=\"left\">現在は1.0のみ規定されているので固定値で\u003Ccode>1.0\u003C\u002Fcode>を指定する\u003C\u002Ftd>\n\u003Ctd align=\"center\">△\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Content-Transfer-Encoding\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">メール転送中の符号化方式を指定する。初期値の\u003Ccode>7bit\u003C\u002Fcode>の他、\u003Ccode>8bit\u003C\u002Fcode>、\u003Ccode>binary\u003C\u002Fcode>、\u003Ccode>quoted-printable\u003C\u002Fcode>、\u003Ccode>base64\u003C\u002Fcode>が指定可能\u003C\u002Ftd>\n\u003Ctd align=\"left\">日本語を取り扱う場合は初期値の\u003Ccode>7bit\u003C\u002Fcode>で良い。\u003Ccode>base64\u003C\u002Fcode>等にすると送信メールのデータ量が肥大化してしまうデメリットがあるので注意\u003C\u002Ftd>\n\u003Ctd align=\"center\">△\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Content-Type\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">メールのメッセージ中のデータ形式。設定値の仕様は\u003Ccode>{type}\u002F{subtype}; {parameter},...\u003C\u002Fcode>である\u003C\u002Ftd>\n\u003Ctd align=\"left\">テキストメールなら\u003Ccode>text\u002Fplain;\u003C\u002Fcode>、HTMLメールなら\u003Ccode>text\u002Fhtml;\u003C\u002Fcode>とし、パラメータとして文字コード指定（\u003Ccode>charset=UTF-8\u003C\u002Fcode>等）を付与しておくことを推奨する（※後述する）\u003C\u002Ftd>\n\u003Ctd align=\"center\">〇\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Return-Path\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">メールが届かなかった場合に、そのメールが送り返される返信先のメールアドレス。Reply-Toと異なり、メールサーバが付加するヘッダ値となる。別名「エンベローブ・フロム・アドレス」\u003C\u002Ftd>\n\u003Ctd align=\"left\">指定しても、通常メールサーバによって上書きされてしまうが、強制的に指定値を押し通すことも可能（※後述する）\u003C\u002Ftd>\n\u003Ctd align=\"center\">〇\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>From\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">（差出人の名前もしくは組織名と）送信元メールアドレス\u003C\u002Ftd>\n\u003Ctd align=\"left\">複数指定可能。複数指定する場合はカンマ\u003Ccode>,\u003C\u002Fcode>で区切る。&#8221;\u003Ccode>{差出人名} &lt;{送信元メールアドレス}&gt;\u003C\u002Fcode>&#8220;もしくは\u003Ccode>{送信元メールアドレス}\u003C\u002Fcode>のみのいずれかで指定する\u003C\u002Ftd>\n\u003Ctd align=\"center\">〇\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Sender\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">実際の（差出人の名前もしくは組織名と）送信元メールアドレス\u003C\u002Ftd>\n\u003Ctd align=\"left\">複数指定不可。&#8221;\u003Ccode>{差出人名} &lt;{送信元メールアドレス}&gt;\u003C\u002Fcode>&#8220;もしくは\u003Ccode>{送信元メールアドレス}\u003C\u002Fcode>のみのいずれかで指定する\u003C\u002Ftd>\n\u003Ctd align=\"center\">〇\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>To\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">（受信者の名前と）宛先のメールアドレス\u003C\u002Ftd>\n\u003Ctd align=\"left\">複数指定可能。複数指定する場合はカンマ\u003Ccode>,\u003C\u002Fcode>で区切る。FromやSenderの書式が利用可能\u003C\u002Ftd>\n\u003Ctd align=\"center\">〇\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Cc\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">カーボンコピー先の（受信者の名前と）宛先メールアドレス\u003C\u002Ftd>\n\u003Ctd align=\"left\">複数指定可能。複数指定する場合はカンマ\u003Ccode>,\u003C\u002Fcode>で区切る。FromやSenderの書式が利用可能\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Bcc\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">ブラインドコピー先の（受信者の名前と）宛先メールアドレス\u003C\u002Ftd>\n\u003Ctd align=\"left\">複数指定可能。複数指定する場合はカンマ\u003Ccode>,\u003C\u002Fcode>で区切る。FromやSenderの書式が利用可能\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Resent-From\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">メール転送時の転送元メールアドレス\u003C\u002Ftd>\n\u003Ctd align=\"left\">複数指定可能。仕様はFromやToと同等\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Resent-Sender\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">メール転送時の実際の転送元メールアドレス\u003C\u002Ftd>\n\u003Ctd align=\"left\">複数指定不可\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Resent-To\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">メール転送時の転送先のメールアドレス\u003C\u002Ftd>\n\u003Ctd align=\"left\">複数指定可能。仕様はFromやToと同等\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Resent-cc\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">メール転送時のカーボンコピー先のメールアドレス\u003C\u002Ftd>\n\u003Ctd align=\"left\">複数指定可能。仕様はFromやToと同等\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Resent-bcc\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">メール転送時のブラインドコピー先のメールアドレス\u003C\u002Ftd>\n\u003Ctd align=\"left\">複数指定可能。仕様はFromやToと同等\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Subject\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">メールの件名\u003C\u002Ftd>\n\u003Ctd align=\"left\">\u003Ccode>mail()\u003C\u002Fcode>では別途引数化されているのでヘッダに指定する必要はない\u003C\u002Ftd>\n\u003Ctd align=\"center\">×\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Comments\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">任意のコメント\u003C\u002Ftd>\n\u003Ctd align=\"left\">\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Keywords\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">メール本文において注目してほしいキーワード等\u003C\u002Ftd>\n\u003Ctd align=\"left\">メーラーによっては指定されたキーワードをハイライトしてくれたりするらしいが、ほとんど実装されていない\u003C\u002Ftd>\n\u003Ctd align=\"center\">×\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Reply-To\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">返信先のメールアドレス\u003C\u002Ftd>\n\u003Ctd align=\"left\">一般的に、未指定時はFromの値が返信先として使用される\u003C\u002Ftd>\n\u003Ctd align=\"center\">〇\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>In-Reply-To\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">返信時にどのメールへの返信かを示す値。Message-IDの値を指定する\u003C\u002Ftd>\n\u003Ctd align=\"left\">複数指定不可\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>References\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">返信などで関係している他のメッセージの一覧。Message-IDの値を指定する\u003C\u002Ftd>\n\u003Ctd align=\"left\">複数指定可能。多くのメーラーでこの値を元にスレッド表示を行っている\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Message-ID\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">個別のメールを特定するためのユニークID。\u003Ccode>{ユニークID}@{ドメイン名（FQDN）}\u003C\u002Fcode>という形式で指定する。\u003C\u002Ftd>\n\u003Ctd align=\"left\">このIDは全世界で唯一なものにならなければならないと規定されている\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Date\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">メールの作成（＝送信）日時\u003C\u002Ftd>\n\u003Ctd align=\"left\">メールサーバ側で付与するので設定不要\u003C\u002Ftd>\n\u003Ctd align=\"center\">×\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Recieved\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">メールを転送したメールサーバ情報を示す文字列\u003C\u002Ftd>\n\u003Ctd align=\"left\">メールサーバが追加する文字列のため設定不要\u003C\u002Ftd>\n\u003Ctd align=\"center\">×\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Encrypted\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">暗号化用の設定\u003C\u002Ftd>\n\u003Ctd align=\"left\">実際には、必要に応じてメールサーバ側でメールの暗号化を行うので設定は不要\u003C\u002Ftd>\n\u003Ctd align=\"center\">×\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Mail-Followup-To\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">主にメーリングリストで利用されるメーリングリストの宛先\u003C\u002Ftd>\n\u003Ctd align=\"left\">複数指定可能\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Mail-Reply-To\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">主にメーリングリストで利用される送信元のメールアドレス\u003C\u002Ftd>\n\u003Ctd align=\"left\">複数指定不可\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Organization\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">送信者が所属する組織名\u003C\u002Ftd>\n\u003Ctd align=\"left\">\u003C\u002Ftd>\n\u003Ctd align=\"center\">△\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Precedence\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">メールサーバの配信優先度。\u003Ccode>list\u003C\u002Fcode>>\u003Ccode>junk\u003C\u002Fcode>>\u003Ccode>bulk\u003C\u002Fcode>の順に優先される\u003C\u002Ftd>\n\u003Ctd align=\"left\">メールサーバによってこの値を使うかどうかは異なるので、必ずしも設定した優先度通りに配信されるわけではない\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Return-Receipt-To\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">配送確認の返信先メールアドレス。メールサーバのメールボックスにメールが届いた際に、メールサーバ側がこの返信先へ返信を行う\u003C\u002Ftd>\n\u003Ctd align=\"left\">開封通知とは異なるので注意\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Errors-To\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">エラー時の返信先メールアドレス\u003C\u002Ftd>\n\u003Ctd align=\"left\">主にメーリングリストなどで利用される\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>Disposition-Notification-To\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">開封通知の返信先メールアドレス\u003C\u002Ftd>\n\u003Ctd align=\"left\">\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>X-*****\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">\u003Ccode>X-\u003C\u002Fcode>で始まるメールヘッダは送信元が任意に設定可能な拡張ヘッダとなる\u003C\u002Ftd>\n\u003Ctd align=\"left\">このヘッダ値が解釈されるかは受信するメーラー側に依存するので、必須なヘッダではない\u003C\u002Ftd>\n\u003Ctd align=\"center\">×\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>X-Sender\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">送信元のメールアドレスを示す\u003C\u002Ftd>\n\u003Ctd align=\"left\">メーラーごとの拡張仕様のため、使用されるかは受信したメーラー次第となる\u003C\u002Ftd>\n\u003Ctd align=\"center\">△\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>X-Mailer\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">一般的には、送信元のメールソフト（メーラー・アプリケーション）の種類を示す\u003C\u002Ftd>\n\u003Ctd align=\"left\">メーラーごとの拡張仕様のため、使用されるかは受信したメーラー次第となる\u003C\u002Ftd>\n\u003Ctd align=\"center\">△\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>X-UIDL\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">POP利用時用のユニークID\u003C\u002Ftd>\n\u003Ctd align=\"left\">POPサーバが付加する値なので設定不要\u003C\u002Ftd>\n\u003Ctd align=\"center\">×\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>X-Priority\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">メールの重要度。通常は 3 で、1（高）～5（低）で指定できる\u003C\u002Ftd>\n\u003Ctd align=\"left\">メーラーごとの拡張仕様のため、使用されるかは受信したメーラー次第となる\u003C\u002Ftd>\n\u003Ctd align=\"center\">△\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Ccode>X-Msmail-Priority\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd align=\"left\">マイクロソフト製メーラー（Outlook等）用の重要度。仕様はX-Priorityと同じ\u003C\u002Ftd>\n\u003Ctd align=\"left\">メーラーごとの拡張仕様のため、使用されるかは受信したメーラー次第となる\u003C\u002Ftd>\n\u003Ctd align=\"center\">&#8211;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>　いやぁ、今回メールヘッダの設定値を調べてみて、色々と勉強になった。今までそこまで意識もせずに漠然と設定してた自分に喝を入れたいものだ。\u003C\u002Fp>\n\u003Ch2>メールヘッダは省略しないで設定しよう\u003C\u002Fh2>\n\u003Cp>　ここからは実践編だ。前項のリストを元に、メールヘッダを省略せずに設定していこう。基本的にメールヘッダは改行コード区切りのプレーンな文字列として取り扱われるので、最終的に文字列として\u003Ccode>mb_send_mail()\u003C\u002Fcode>に渡してあげる必要があるのだが、設定値が多いのでそのまま文字列として定義していくとコードの見通しが悪くなる。そこで、連想配列として定義して、最後に文字列展開するのがベストだと思う。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">$headers \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> [\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  'MIME-Version'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> '1.0'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  'Content-Transfer-Encoding'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> '7bit'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  'Content-Type'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> 'text\u002Fplain; charset=UTF-8'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  'Return-Path'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> 'from@example.com'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  'From'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> 'SenderName &#x3C;from@example.com>'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  'Sender'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> 'SenderName &#x3C;from@example.com>'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  'Reply-To'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> 'from@example.com'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  'Organization'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> 'OrganizationName'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  'X-Sender'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> 'from@example.com'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  'X-Mailer'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> 'Postfix\u002F2.10.1'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  'X-Priority'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> '3'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">];\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">array_walk\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $headers, \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">function\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $_val, $_key ) \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">use\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ( \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">&#x26;\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">$header_str ) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    $header_str \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">.=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> sprintf\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"%s: %s \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">\\r\\n\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">trim\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $_key ), \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">trim\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $_val ) );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">} );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">mb_send_mail\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $send_to, $subject, $body, $header_str );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　\u003Ccode>mb_send_mail()\u003C\u002Fcode>関数に渡すメールヘッダ文字列の変数\u003Ccode>$header_str\u003C\u002Fcode>は\u003Ccode>array_walk()\u003C\u002Fcode>関数のクロージャに参照渡しされ、初回のクロージャ起動時に初期化されるのでグローバルスコープ下での初期化は不要だ。\u003Cbr \u002F>\n　蛇足だが、連想配列をキー・バリュー形式の文字列に展開する時は、このクロージャを使うやり方がお手軽なので、覚えておくと重宝する。\u003C\u002Fp>\n\u003Ch3>\u003Ccode>Content-Type\u003C\u002Fcode>ヘッダには文字コードパラメータを含めること\u003C\u002Fh3>\n\u003Cp>　\u003Ccode>Content-Type\u003C\u002Fcode>ヘッダが\u003Ccode>Content-Type: text\u002Fplain;\u003C\u002Fcode>のようなタイプ指定だけだと、Thunderbird等のメーラーで本文が文字化けする場合がある。これは、メールヘッダの指定時に、\u003Ccode>mb_language( 'Japanese' )\u003C\u002Fcode>と\u003Ccode>mb_internal_encoding( 'UTF-8' )\u003C\u002Fcode>で言語や文字コードを指定していても回避できない。おそらく、メーラー側で\u003Ccode>Content-Type\u003C\u002Fcode>ヘッダ値に文字コードがない場合は、ユーザが指定しているメーラーのエンコーディング指定を優先してしまうからと推測される。\u003Cbr \u002F>\n　なので、対策としては\u003Ccode>Content-Type\u003C\u002Fcode>ヘッダには優先的にエンコードする文字コードを制御するために文字コードパラメータを含めておくことである。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>Content-Type: text\u002Fplain; charset=UTF-8\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　日本語などのマルチバイト文字列を含むテキスト形式のメールを送信する場合であれば、上記のようにメールヘッダを指定しておくのが一番安全だ。\u003C\u002Fp>\n\u003Ch3>メールヘッダにマルチバイト文字列を含む場合は\u003Ccode>mb_encode_mimeheader()\u003C\u002Fcode>を使う\u003C\u002Fh3>\n\u003Cp>　\u003Ccode>mb_send_mail()\u003C\u002Fcode>関数がマルチバイト文字列を自動エンコードするのは「件名」と「本文」だけで、メールヘッダに含まれるマルチバイト文字列はエンコードされない。なので、メールヘッダに日本語を含むような場合は、それぞれ個別にエンコードしてあげないと文字化けが起こる場合がある（Outlookやスマートフォンのメーラー等で起きやすい）。そのため、\u003Ccode>mb_encode_mimeheader()\u003C\u002Fcode>関数を利用して、メールヘッダを個別にエンコードしていこう。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">$headers \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> [\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  'From'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> mb_encode_mimeheader\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'送信者の名前'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ) \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">.\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">' &#x3C;'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">.\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $from_email_address \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">.\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'>'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  'Sender'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> mb_encode_mimeheader\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'送信者の名前'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ) \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">.\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">' &#x3C;'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">.\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $from_email_address \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">.\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'>'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  'Organization'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> mb_encode_mimeheader\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'送信者の組織名'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ),\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">];\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　通常、メールヘッダ内でマルチバイト文字列を含む可能性があるのは上記のように「From」「Sender」「Organization」ぐらいなので、それらのメールヘッダを設定する場合には注意しておこう。一応、「To」や「Cc」「Bcc」等にも宛先の受信者名としてマルチバイト文字列を含むことができるが、システムから送信するメールについて、そこまでフランクな仕様を持ち込まなくても良いのではないかと思うので、今回はあえて割愛している。\u003C\u002Fp>\n\u003Ch3>\u003Ccode>Return-Path\u003C\u002Fcode>ヘッダに指定した値を強制的に適用する\u003C\u002Fh3>\n\u003Cp>　Return-Pathは別名「エンベローブ・フロム・アドレス」と云われ、メールサーバ（SMTPサーバ）側で指定されている値がメール送信時に割り振られる。そのため、PHP側でメールヘッダの値を設定しても通常は無視されてしまうのだ。さらに、メールサーバ側ではメール・アプリケーション（Postfixやqmail等）で最適なメールアドレスをReturn-Pathアドレスとして設定されていないと、初期値が使用されてしまう。例えばPostfixでは、postfix\u002Fcanonicalで初期値が、\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-text\">root root@localhost.localdomain\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>──となっているので、受信したメールのReturn-Pathヘッダのアドレスが\u003Ccode>root@localhost.localdomain\u003C\u002Fcode>等の存在しない値になってしまう。このアドレスのドメイン部分が、メールが送信されたホストのDNSに登録されているSPFレコード（TXTレコードの一種）のドメインやIPアドレスと異なると、受信したメーラー側でSPF認証に失敗して「このメールは送信元をなりすましている可能性が高い」と判断して、迷惑メールに振り分けてしまうのだ。SPFレコードの詳細は、下記の記事が詳しくてわかりやすいので参照してみて欲しい。\u003C\u002Fp>\n\u003Cblockquote>\u003Cp>\n  \u003Ca href=\"https:\u002F\u002Fsendgrid.kke.co.jp\u002Fblog\u002F?p=3509\">送信ドメインを認証するためのSPFレコードに詳しくなろう\u003C\u002Fa>\n\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Cp>　さて、これを解決するには、まずメールサーバとしてのメール・アプリケーション側でReturn-PathアドレスをSPFレコードに登録されている最適なFQDNに変更するのが最善手である（なお、そもそもDNSにSPFレコードが設定されていない場合は、どうしようもないので、それは必ずやること）。しかし、そこまでするとなるとPHP以外の知見が必要になって来て何気に面倒なので、ここではお手軽にSPFレコードに登録されているFQDNのメールアドレスをReturn-Pathとして強制的に設定してあげる方法を紹介しておく。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">$from_address \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> 'from@example.com'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">$add_params \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> '-f'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">.\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $from_address;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">mb_send_mail\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $send_to, $subject, $body, $header_str, $add_params );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　\u003Ccode>mb_send_mail()\u003C\u002Fcode>関数では第5引数additional_parameterを使い、MTA（メール・アプリケーション≒\u003Ccode>sendmail\u003C\u002Fcode>もしくは\u003Ccode>mail\u003C\u002Fcode>コマンド）にコマンドライン引数を渡すことができる。これを使ってReturn-Pathアドレスを指定することで、MTAがメールヘッダに付与するReturn-PathアドレスをPHP側から強制化できるのだ。\u003Cbr \u002F>\n　上記の例では、\u003Ccode>-f\u003C\u002Fcode>オプション（エンベローブ・フロム・アドレス設定オプション）のパラメータとして送信者のメールアドレス\u003Ccode>from@example.com\u003C\u002Fcode>をしている。これによって、MTAが送信するメールのReturn-Pathが\u003Ccode>from@example.com\u003C\u002Fcode>に固定化される。\u003C\u002Fp>\n\u003Cp>　最後に、受信したメールのReturn-PathヘッダやSPFレコード認証を正常通過しているかを確認してみよう。Gmailで受信した場合での確認例になるが、受信したメールの右上の「その他」のアイコンから「メッセージのソースを表示」をクリックすると、メールヘッダが含まれる全ソースが表示される。\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-text\">Return-Path: &lt;from@example.com&gt;\nReceived-SPF: pass (google.com: domain of from@example.com designates ***.***.***.*** as permitted sender) client-ip=***.***.***.***;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>上記のように、Return-Pathヘッダが指定したメールアドレスになっていることと、Received-SPFが正常に認証されたことを示す「pass」となっていればOkだ。もしSPF認証に失敗していた場合は、SPFレコードに登録されているFQDNとReturn-Pathアドレスのドメインが一致していない可能性がある。\u003C\u002Fp>\n\u003Cp>　おまけとして、任意のホストがSPFレコードを持っているかどうかをチェックするためのPHPスクリプトを紹介しておく。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">&#x3C;?\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">php\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">$host_name \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $_SERVER[\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'HTTP_HOST'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">];\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F チェックしたいホスト名を指定する\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">$dns_records \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> dns_get_record\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $host_name, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">DNS_ALL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">$result \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> ''\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">if\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ( \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">!\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> empty\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $dns_records ) ) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    foreach\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ( $dns_records \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">as\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $_record ) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        if\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ( \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'TXT'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> ===\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $_record[\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'type'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">] \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">&#x26;&#x26;\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> strpos\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $_record[\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'txt'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">], \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'v=spf1'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ) \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">!==\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> false\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            $result \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">.=\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> \"The \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">\\\"\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">{\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">$host_name\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">}\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">\\\"\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> has a SPF record(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">\\\"\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">{\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">$_record\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">['txt']}\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">\\\"\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">).\"\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> .\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> PHP_EOL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">if\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ( \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">empty\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $result ) ) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    $result \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">.=\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> \"The \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">\\\"\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">{\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">$host_name\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">}\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">\\\"\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> does not have a SPF record.\"\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> .\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> PHP_EOL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">echo\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $result;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">exit\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　変数\u003Ccode>$host_name\u003C\u002Fcode>にReturn-Pathとして設定したいホスト名（FQDN）を指定して実行すると、そのホストのDNSがSPFレコードを持っているかを判定して、そのSPFレコードの設定値を表示してくれる。ただし、該当のホストがSPFレコードを持っていたとしても、その設定値でメーラー側のSPF認証を通過できるかまでは検証しないので、その点は留意してほしい。\u003C\u002Fp>\n\u003Ch3>MTAのTLS通信設定を確認しておく\u003C\u002Fh3>\n\u003Cp>　Gmail等では、メール受信時にTLS通信がされていないメールについては警告が出る。今のところこれによって迷惑メールに分別されることはないようだが、将来的にはわからない。なので、利用しているMTAで外部へのSMTP通信時にTLS通信を使うように設定しておくと安心である。\u003Cbr \u002F>\n　例えば、Postfixでは外部へのSMTP通信時にTLSが利用可能ならTLS通信を使う設定が、デフォルトでOFFになっているので、有効化しておこう。Postfixでのやり方は下記の記事が参考になるかと。\u003C\u002Fp>\n\u003Cblockquote>\u003Cp>\n  \u003Ca href=\"https:\u002F\u002Fqiita.com\u002Ftak-onda\u002Fitems\u002Fb585841e03e4619ec367\">Postfix で MTA 間送信に TLS を利用する\u003C\u002Fa>\n\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Ch2>メール本文をテンプレート化して外部ファイルで管理する\u003C\u002Fh2>\n\u003Cp>　PHP側の処理に応じてメールの本文を変更したい場合などは、メール本文をテンプレート化して外部ファイルとして管理すると、ソース内にメールメッセージをハードコーディングすることもなく見通しの良いコードが書ける。例えば多言語対応したアプリケーションで、日本語環境ユーザと英語圏ユーザとで送信メールの記述言語を切り分けたい時など、このテンプレート方式にしておくとメール送信周りは汎用コード化でき、メールメッセージへの保守はテンプレート側だけに集約できるので、運用管理が抜群にしやすくなる。\u003Cbr \u002F>\n　では、下記のようなテンプレートをメール本文として読み込んでみよう。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">&#x3C;?=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $display_name \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">?>\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">さん、こんにちは。\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">あなたのアカウントが新たに作成されました。\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">下記のURLから、ユーザー名：\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">&#x3C;?=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $user_id \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">?>\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">とご登録時のパスワードにてサインインしてください。\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">サインインURL：\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">&#x3C;?=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $signin_url \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">?>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">〇〇〇〇事務局より\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　次に、読み込み元での処理だ。\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-text\">\u002F\u002F 変数定義\n$display_name = 'テスト・ユーザー';\n$user_id = 'test_user1';\n$signin_url = 'https:\u002F\u002Fexample.com\u002Fsignin\u002F?uid=' . $user_id;\n\u002F\u002F テンプレート読み込み\nob_start();\ninclude __DIR__ . '\u002Ftemplates\u002Fmail_body.php';\n$mail_body = ob_get_contents();\nob_end_clean();\n$mail_body = strtr( $mail_body, [ \"\\r\\n\" =&gt; \"\\n\", \"\\r\" =&gt; \"\\n\" ] );\u002F\u002F to all LF\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　ポイントはテキスト形式であるテンプレートをバッファリングによって読み込むことで、変数の埋め込み処理が完了した状態のテキストを、出力を伴うことなくメール送信用の$mail_bodyとして格納できる点だ。コードの見通しも良いし、読み込むテンプレートファイルを条件分岐させることも容易だ。\u003Cbr \u002F>\n　あと、最後に改行コードをすべてLFに変換しているが、これは必須ではない。稀に、テンプレートファイルで読み込んだ本文中の改行コードが、メール送信時に重複解釈されて空行が増えたり、逆に改行されないというケースが発生した場合の対処用のコードである。詳しくは、\u003Ca href=\"https:\u002F\u002Fwww.php.net\u002Fmanual\u002Fja\u002Ffunction.mail.php\">PHPのmail()のドキュメント\u003C\u002Fa>で下記のように注意されている。\u003C\u002Fp>\n\u003Cblockquote>\u003Cp>\n  メッセージが受信されなかった場合には、LF（\\n）のみを使ってみてください。 Unix の MTA の中には、自動的に LF を CRLF に変換してしまう もの (有名なところでは、qmailなど) があります（もし CRLF を利用していた場合、CR が重複してしまいます）。 ただし、これは最後の手段です。というのも、これは RFC 2822に違反しているからです。\n\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Cp>　本当はテンプレート読み込み型のメール送信時に改行コードに異常が見られた場合にのみ使った方が良いのだろうが、私は面倒なので一律で変換している。\u003C\u002Fp>\n\u003Ch2>実践的なメール送信処理の例\u003C\u002Fh2>\n\u003Cp>　最後に、このおさらいの総括として、\u003Ccode>mb_send_mail()\u003C\u002Fcode>のメール送信処理をできるだけ使いやすいように汎用化してみたので、そのソースを紹介しておく。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">&#x3C;?\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">php\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">defined\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'MAIL_LOG_PATH'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ) \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">or\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> define\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'MAIL_LOG_PATH'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">__DIR__\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> .\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> '\u002Fmail.log'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">function\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\"> _send_mail\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $to, $subject, $message, $headers \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> ''\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, $user_params \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> [], $language \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> 'Japanese'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, $encoding \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> 'UTF-8'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    if\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ( \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">!\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> is_array\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $to ) ) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        $to \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> explode\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">','\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, $to );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    if\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ( \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">@\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">file_exists\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $message ) ) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">        extract\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $user_params, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">EXTR_PREFIX_SAME\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'atts'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        $template_path \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $message;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">        ob_start\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">();\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        include\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $template_path;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        $message \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> ob_get_contents\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">();\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">        ob_end_clean\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">();\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    $message \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> strtr\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $message, [ \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">\\r\\n\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">\\n\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">\\r\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">\\n\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ] );\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">\u002F\u002F to all LF\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    $add_params \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> ''\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    if\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ( \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">empty\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $headers ) ) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        $header_str \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> ''\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    } \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">else\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    if\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ( \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">!\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> is_array\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $headers ) ) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        $header_str \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $headers;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    } \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">else\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">        array_walk\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $headers, \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">function\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $_val, $_key ) \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">use\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ( \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">&#x26;\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">$header_str ) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            $header_str \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">.=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> sprintf\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"%s: %s \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">\\r\\n\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, $_key, $_val );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">            if\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ( \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'Return-Path'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> ===\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $_key ) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                $return_path \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> trim\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $_val );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        } );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    if\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ( \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">isset\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $return_path ) \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">&#x26;&#x26;\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> !\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> empty\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $return_path ) ) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        $add_params \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> \"-f\"\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> .\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $return_path;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    mb_language\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $language );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    mb_internal_encoding\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $encoding );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    $failure_sent \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    foreach\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ( $to \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">as\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $send_to ) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        $send_to \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> trim\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $send_to );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        if\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ( \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">mb_send_mail\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $send_to, $subject, $message, $header_str, $add_params ) ) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            $result \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> sprintf\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'[%s] An email has been sent to \"%s\".'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> .\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">\\n\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">date\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'c'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ), $send_to );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        } \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">else\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            $result \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> sprintf\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'[%s] Failed to send email to \"%s\".'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> .\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">\\n\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">date\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'c'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ), $send_to );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            $failure_sent\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">++\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">        error_log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $result, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">3\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">MAIL_LOG_PATH\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    if\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> ( $failure_sent \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">>\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 0\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> &#x26;&#x26;\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $failure_sent \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">==\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> count\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $to ) ) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        return\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> false\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    } \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">else\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        return\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> true\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　使い方は、下記のようになる。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 送信元の設定\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">$from_address \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> 'from@'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">.\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $_SERVER[\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'HTTP_HOST'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">];\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">$from_name    \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> mb_encode_mimeheader\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'送信者の名前'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">$from_header  \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> sprintf\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'%s &#x3C;%s>'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, $from_name, $from_address );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">$return_path  \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> 'noreply@'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">.\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $_SERVER[\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'HTTP_HOST'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">];\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">$organization \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> mb_encode_mimeheader\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'送信者の組織名'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 送信先の設定（複数の場合はカンマ区切り）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">$to_address \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> 'sender1@example.com, sender2@example.com'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F 件名\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">$subject \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> '【テスト】メールの件名'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F メール本文をテンプレートから読み込む場合はテンプレートファイルのパスを設定\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">$message \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> __DIR__\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> .\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> '\u002Ftemplates\u002Fmail_body_crlf.php'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F メールヘッダの設定\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">$headers \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> [\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'MIME-Version'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> '1.0'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'Content-Transfer-Encoding'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> '7bit'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'Content-Type'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> 'text\u002Fplain; charset=UTF-8'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'Return-Path'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $return_path,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'From'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $from_header,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'Sender'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $from_header,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'Reply-To'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $from_address,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'Organization'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $organization,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'X-Sender'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $from_address,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'X-Mailer'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> 'PHP\u002F'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">.\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> phpversion\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(),\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'X-Priority'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> '3'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">];\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F メール本文用のテンプレート内で使う変数を連想配列として設定する\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">$user_params \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> [\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'display_name'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> 'テスト・ユーザー1'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'user_id'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> 'TestUser1'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'signin_url'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> 'https:\u002F\u002Fexample.com\u002Fsignin\u002F?uid=TestUser1'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">];\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F メールを送信\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">_send_mail\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">( $to_address, $subject, $message, $headers, $user_params );\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　第4引数のメールヘッダは文字列型でも受け付けるが、連想配列で渡すのがベスト。なぜなら、メールヘッダの連想配列内に\u003Ccode>Return-Path\u003C\u002Fcode>が含まれていた場合、メール送信時に\u003Ccode>mb_send_mail()\u003C\u002Fcode>の第5引数additional_parameterを自動で設定するようにしてあるからだ。\u003Cbr \u002F>\n　また、上記の例では第3引数にメール本文のテンプレートパスを指定しているが、そのテンプレート本体は下記のようになっている。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">&#x3C;?=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $display_name \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">?>\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">さん、こんにちは。\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">あなたのアカウントが新たに作成されました。\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">下記のURLから、ユーザー名：\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">&#x3C;?=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $user_id \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">?>\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">とご登録時のパスワードにてサインインしてください。\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">サインインURL：\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">&#x3C;?=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> $signin_url \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">.\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">\\n\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> ?>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">〇〇〇〇事務局より\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">テンプレートの改行コード：CRLF\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　テンプレート内で使われる変数は第5引数user_paramsに連想配列として指定できる。配列のキー名がそのまま変数名としてテンプレート内に埋め込まれる建付けだ。もし、すでに使用されている変数名だった場合は、接頭辞として\u003Ccode>atts_\u003C\u002Fcode>が付くので、そういう場合はテンプレート側で変数名を調整すればよい。なお、第3引数の文字列をテンプレートパスではない文字列にするとそのままメールの本文として出力されるので、下記のように指定することも可能だ。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">$message \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> &#x3C;&#x3C;&#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">EOM\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">ここには、\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">メールの本文が、\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">入ります。\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">EOM\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　あと、メールの送信処理が行われると、送信の成功・失敗にかかわらず\u003Ccode>MAIL_LOG_PATH\u003C\u002Fcode>で定義したパスにログを出力するようになっている。ログは下記のように出力される。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[2020-05-17T21:22:04+09:00] An email has been sent to \"sender1@example.com\".\n[2020-05-17T21:22:04+09:00] An email has been sent to \"sender2@example.com\".\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　メールフォームなどをさくっと準備したい時などには、これでメール送信部分はまかなえてしまうと思う。\u003C\u002Fp>\n",[275,277,280,283,286,289],{"slug":276,"name":276},"mb_send_mail",{"slug":278,"name":279},"php","PHP",{"slug":281,"name":282},"postfix","Postfix",{"slug":284,"name":285},"%e6%96%87%e5%ad%97%e5%8c%96%e3%81%91","文字化け",{"slug":287,"name":288},"%e6%97%a5%e6%9c%ac%e8%aa%9e","日本語",{"slug":290,"name":291},"%e8%bf%b7%e6%83%91%e3%83%a1%e3%83%bc%e3%83%ab","迷惑メール",[293,298,303,308],{"slug":142,"title":143,"date":144,"excerpt":145,"image":146,"categories":294},[295,296,297],{"slug":149,"name":150},{"slug":138,"name":139},{"slug":25,"name":26},{"slug":166,"title":167,"date":168,"excerpt":169,"image":170,"categories":299},[300,301,302],{"slug":161,"name":162},{"slug":138,"name":139},{"slug":25,"name":26},{"slug":176,"title":177,"date":178,"excerpt":179,"image":170,"categories":304},[305,306,307],{"slug":161,"name":162},{"slug":138,"name":139},{"slug":25,"name":26},{"slug":38,"title":39,"date":40,"excerpt":41,"image":42,"categories":309},[310,311],{"slug":45,"name":46},{"slug":25,"name":26},{"slug":313,"title":314,"date":315,"excerpt":316,"image":317,"categories":318},"illustrated-wp-login-php-to-understand-wordpress-user-authentication","図解『wp-login.php』！ WordPressのユーザ認証を極める！","2020-04-27T22:02:10","ここ最近、「FF7Remake」やら「MHW:IB」の傍らの空き時間で「WordPressサイトの秘匿化チャレンジ」と称した独自プロジェクトをやっているのだが、その中でWordPressのユーザ認証周りの秘匿化が何気に…","\u002Fassets\u002Fuploads\u002F2020\u002F04\u002Fwp-login-docs.png",[319],{"slug":74,"name":75},{"slug":77,"title":78,"date":79,"excerpt":80,"image":81,"categories":321},[322],{"slug":84,"name":85},1793391397330]