PHPでメールを送信します

Christopher Nolan
リリース: 2025-03-02 08:34:11
オリジナル
819 人が閲覧しました

Sending Emails with PHP

コアポイント

  • PHPは、基本的なプレーンテキストメッセージ、HTMLメッセージ、添付ファイル付きのメールなど、電子メールを送信する簡単で効率的な方法を提供します。
  • phpのmail()関数は、電子メールの送信に使用されます。簡単なメールの場合、受信者のアドレス、主題、および電子メールの本文の3つのパラメーターのみが必要です。
  • HTMLメールまたはメールを添付ファイルで送信する場合、MIME標準を使用してメールを部品に分割し、選択した境界で分離する必要があります。各セクションでは、コンテンツの内容、エンコードの方法、コンテンツの処理方法、およびコンテンツ自体を定義する必要があります。
  • PHPMailerライブラリを使用すると、PHPでメールを送信する機能が強化されます。これにより、SMTPサーバーへの接続、添付ファイルの追加、エラーの取り扱い、複数のメールの送信、カスタムヘッダーの追加などが可能になります。

興味深い返信アドレスを含むメールを友人に送信するためにPHPでスクリプトを書きたいかもしれませんが、もっと意味のあることがあります!もちろん、他の理由があるかもしれません:たとえば、問題を通知するためにCronジョブが必要な場合があるか、ユーザーがスクリプトを開始したときに通知されるか、メッセージを転送するための連絡先フォームがあります。そして、それはとても簡単です!ほとんどの場合、PHPのインストールはメールを送信できます。共有ホスティングを使用している場合、またはAPT-Getのようなパッケージ管理システムを使用してPHPをインストールしている場合、おそらくすでにセットアップされます。 SourceからPHPをコンパイルしたり、WindowsでPHPを実行したりする場合にのみ、追加の構成を心配する必要があります。どちらの場合でも、あなたを助けるためにオンラインで利用できる多くのリソースがあります。これはこの記事の範囲を超えているので、私はあなたがそれをセットアップしたと思います。そうでない場合、Googleはあなたの友達になります。

スーパーベーシックの例

非常に簡単なメールを送信するには、コードは次のとおりです。

実際には、基本的なプレーンテキストメールを送信することがすべてです(PHPを適切に構成する方法については、Googleをもう一度確認してください)。次に、これがスクリプトでどのように見えるか見てみましょう。たとえば、クエリが失敗するたびにスクリプトに電子メールを送信したいとします:
<?php mail($address, $subject, $message); ?>
ログイン後にコピー
ログイン後にコピー

クエリ実行に予期せぬエラーがいくつかある場合、どのスクリプトにエラーがあり、何がエラーがあるかを知らせるメールが届きます。
<?php
$query = "SELECT left_arm AS arm_in, right_leg AS leg_in, front_head AS head_in FROM hokey_pokey WHERE its_about = 'all'";
try {
    $result = $db->query($query);
    // ...
} catch (PDOException $e) {
    mail("bad_things@my_database.com", "Error in " . $_SERVER["SCRIPT_NAME"], $e->getMessage());
}
?>
ログイン後にコピー

フルhtmlメールの例

さあ、HTMLボディとプレーンテキストの代替手段とファイル添付ファイルを含む完全なマルチパート

例を見てみましょう。
<?php mail($address, $subject, $message); ?>
ログイン後にコピー
ログイン後にコピー

基本概念を理解しやすくするために、より典型的な電子メールスクリプトのいくつかの側面が簡素化されていますが、このセクションで説明します。まず、$emailList配列には、メールを共有したいメールアドレスがいくつかあります。配列はスクリプトの最後に反復され、各アドレスは私のメールのコピーを受け取ります。次に、$headers文字列はさまざまな電子メールヘッダーで構築されます。文字列内の各ヘッダーはCRLF(rn)で区切られ、電子メールメッセージの形式を定義するRFC 2822標準に準拠しています。 「from: "fluffy mumsy"rn "fromヘッダーは、受信者がメールを見るメールアドレスを指定します。 「返信:wasegonnaberich@shhhsecret.comrn」返信ヘッダーは、電子メールの応答を送信するメールアドレスです。 「from:」とは異なることにより、ヘッダー、このメールがスパムの増加として識別される可能性があります(ただし、これが電子メールクライアントにこのメッセージをスパムとしてマークする唯一の理由である場合、それは渡される可能性があります)。 「Mime-version:1.0rn」Mime-versionヘッダーは、ボディに多目的インターネットメール拡張を期待するようにサーバーに指示します。 「コンテンツタイプ:MultiPart/Mixed; Boundary = "YagottakeEpemseparated" RN "「コンテンツタイプ」ヘッダーは実際に2つのことを行います。これは、ボディに複数の異なるタイプの部品があることを示し、各部品を分離するために使用される文字列を指定します。この境界文字列はメッセージ内の他の場所に表示されません。そうしないと、メールクライアントがメッセージを正しく解析できません。たとえば、「12」を境界として使用できますが、メールの他の場所に表示される可能性があります。 「yagottakeepemseparated」を選択しました。衝突の可能性が非常に低いため、ほとんどの人は$boundary = md5(time())などの境界としてランダムに生成されたハッシュを割り当てます。 novyrus.zip(ここにスクリプトと同じディレクトリにあります)の内容は、base64によってエンコードされ、「ブロック」に分割されているため、メールクライアントの処理が容易になります。結果は$goodAttachmentに保存され、後で表示されます。最後に、電子メール本体の構成... "-yagottakeepemseparatedrn"これは、以前に定義された境界を使用し、メールクライアントに「これは電子メールメッセージの最初の部分の始まりです」というメールクライアントに伝える最初の例です。 「コンテンツタイプ:マルチパート/代替、境界= "afferemailalternative" rn "メールヘッダーに記載されている「マルチパート/混合」に加えて、ボディと異なる境界(このブレークダウンに固有)で「マルチパート/代替」を使用して、メッセージの代替形式を提供することもできます。 「-everemailalternativen」これはネストされた境界の最初のインスタンスであり、メッセージの最初の代替バージョンを起動します。 「Content-Type:Text/Plain; charset = "ISO-8859-1" RN "このコンテンツタイプのヘッダーは、この代替手段がプレーンテキストであることをメールクライアントに伝えます。クライアントがより複雑な形式(HTMLなど)を表示できない場合、このバージョンのメッセージを使用します。 「コンテンツトランスファーエンコード:7bitrn」コンテンツトランスファーエンコードヘッダーは、メッセージで使用されるエンコードスキームを指定します。歴史的な理由から、「7ビット」がデフォルト値であるため、省略できます。私はあなたに知らせるためだけにそれを含めました。 「あなたはお金がない安いテキストメールを持っています。 「-evemailalternativen」最初の代替案は終了し、次の代替案を開始できます。 「Content-Type:Text/HTML; charset = "ISO-8859-1" RN "このコンテンツタイプのヘッダーは、このバージョンがHTMLとしてフォーマットされていることをクライアントに通知し、使用される文字セットをクライアントに通知します。 「... rn」このバージョンのコンテンツは、HTMLタグが含まれていることを除いて、プレーンテキストバージョンとは大きく異なることに注意してください。一部のスパムフィルターは、これを私のメールが私の受信トレイに届かないようにする別の理由と見なすかもしれません。 "-yagottakeepemseparatedrn"これはマルチパート/混合境界であり、すべての選択肢を含むメッセージ本文セクションの終わりに到達したことを示します。 「コンテンツタイプ:アプリケーション/zip; name = "novyrus.zip" rn "コンテンツタイプのヘッダーは、電子メールの次の部分が添付ファイル(novyrus.zipファイル)であり、zipファイルであることを示します。 「コンテンツトランスファーエンコード:base64RN」7ビットエンコード文字を7ビットに制限し、ZIPファイルに必要なすべてのバイナリ文字を忠実に表すことはできません。そのため、ファイルはbase64エンコードおよびチャンクされています。ここでのコンテンツ転移エンコードヘッダーは、クライアントに添付ファイルをデコードする方法を知らせます。 「コンテンツディスポジション:AttachmentRn」コンテンツディスポジションヘッダーは、コンテンツのレンダリング方法を示しています。zipファイルをメッセージにインライン要素として表示することはほとんど意味がありませんが、画像を埋め込むのに非常に役立ちます。 $goodAttachment . "rn"添付ファイルの内容は、単にミックスにダンプされます。 「-yagottakeepemseparated-」これは最終境界であり、宣言はコンテンツなしで最後にダブルダッシュのセットを追加することで終了します。

概要

それだけです! Ultra-Basic Textメールと添付ファイル付きの完全なHTMLメールを送信する方法を学びました。簡単な電子メールは、単にmail()関数を呼び出すだけです。 HTMLメッセージの場合、MIME標準を使用して電子メールをセクションに分解し、選択した境界で分離する必要があります。次に、コンテンツとは何か、エンコードされている方法、コンテンツの処理方法、およびコンテンツ自体を定義します。メールを送信する予定の人に応じて、実際に何か深刻なものを送りたい場合に備えて、メールをスパムとしてマークする可能性が高くなる可能性があるものを認識する必要があります。 Photosani / shutterstockの写真

php で電子メールを送信することについてのFAQ

(長さが長すぎて擬似オリジナルの目標と一致しないため、FAQパーツはここでは省略されています。FAQパーツの内容は元のテキストと一致しています。元のテキストに簡単なステートメント調整を行い、擬似オリジナルを完成させます。)

以上がPHPでメールを送信しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート