CodeIgniter を使用してメールを送信する方法

電子メールは Web アプリケーションにとって非常に重要です。ユーザーがサインアップするときに、電子メール アドレスを確認し、ユーザーがサブスクリプションを確認できるようにするために、電子メールを送信したい場合があります。また、電子メールは、忘れたパスワードをリセットしたり、顧客に請求書や領収書を送信したりするためにも使用されます。CodeIgniter を使用すると、さまざまなオプションを使用して、アプリケーションから電子メールを簡単に送信できます。

CodeIgniter には、電子メールの送信時に使用できる組み込みの電子メール ライブラリがあります。

CodeIgniter メール設定

電子メール設定を管理できる中心的な場所が必要です。CodeIgniter には電子メール用の設定ファイルが付属していないため、自分で作成する必要があります。

application/configディレクトリにemail.phpファイルを作成します。

email.phpに次のコードを追加します。

<?php defined('BASEPATH') OR exit('No direct script access allowed');

$config = array(
    'protocol' => 'smtp', // 'mail', 'sendmail', or 'smtp'
    'smtp_host' => 'smtp.example.com', 
    'smtp_port' => 465,
    'smtp_user' => 'no-reply@example.com',
    'smtp_pass' => '12345!',
    'smtp_crypto' => 'ssl', //can be 'ssl' or 'tls' for example
    'mailtype' => 'text', //plaintext 'text' mails or 'html'
    'smtp_timeout' => '4', //in seconds
    'charset' => 'iso-8859-1',
    'wordwrap' => TRUE
);

ここに、

  • 'protocol' => 'smtp'、メールを送信するときに使用するプロトコルを指定します。これは、Gmail の smtp 設定またはホストの smtp 設定になります。
  • 'smtp_host' => 'smtp.example.com'、SMTPホストを指定します。たとえば、Gmailを使用する場合は、smtp.gmail.comのようになります。
  • 'smtp_port' => 465、SMTPメール用に設定された指定されたSMTPホスト上の開いているポート
  • 'smtp_user' => 'no-reply@example.com'、メールを送信する際に送信者として使用されるメールアドレス。これはサーバー上に存在する有効なメールアドレスである必要があります。
  • 'smtp_pass' => '12345!'、指定されたSMTPユーザーメールのパスワード
  • 'smtp_crypto' => 'ssl'、使用する暗号化方式 (ssl、tls など) を指定します。
  • 'email type' => 'text' は、使用するメールの種類を設定します。これは、必要に応じてプレーン テキストまたは HTML のいずれかになります。
  • 'smtp_timeout' => '4' は、ホストへの接続試行時にタイムアウト例外がスローされるまでの経過時間を秒単位で指定します。
  • 'charset' => 'iso-8859-1' は、電子メールの送信時に使用する文字セットを定義します。
  • 'wordwrap' => TRUE を TRUE に設定すると、ワードラップが有効になります。 FALSE に設定されている場合、ワードラップは有効になりません。

注意: 電子メールの送信を機能させるには、有効な構成パラメータを指定する必要があります。ダミーパラメータでは電子メールを送信できません。

CodeIgniter メールビュー

このセクションでは、受信者に電子メールを送信するビューを作成します。

アプリケーション/ビューに新しいディレクトリメールを作成する

新しいファイルcontact.php application/views/emailを作成します。

application/views/email/contact.phpに次のコードを追加します。

<!DOCTYPE html>
<html>
    <head>
        <title>CodeIgniter Send Email</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <div>
            <h3>Use the form below to send email</h3>
            <form method="post" action="<?=base_url('email')?>" enctype="multipart/form-data">
                <input type="email" id="to" name="to" placeholder="Receiver Email">
                <br><br>
                <input type="text" id="subject" name="subject" placeholder="Subject">
                <br><br>
                <textarea rows="6" id="message" name="message" placeholder="Type your message here"></textarea>
                <br><br>
                <input type="submit" value="Send Email" />
            </form>
        </div>
    </body>
</html>

ここに、

  • 電子メール、件名、メッセージを受け入れ、パラメータを電子メール ルートに渡す基本的な HTML フォームがあります。

CodeIgniter メール コントローラー

それでは、メールの送信を処理するコントローラを作成しましょう。

application/controllers/EmailController.php に新しいファイル EmailController.php を作成します。

EmailController.phpに次のコードを追加します。

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class EmailController extends CI_Controller {

    public function __construct() {
        parent:: __construct();

        $this->load->helper('url');
    }

    public function index() {
        $this->load->view('email/contact');
    }

    function send() {
        $this->load->config('email');
        $this->load->library('email');
        
        $from = $this->config->item('smtp_user');
        $to = $this->input->post('to');
        $subject = $this->input->post('subject');
        $message = $this->input->post('message');

        $this->email->set_newline("\r\n");
        $this->email->from($from);
        $this->email->to($to);
        $this->email->subject($subject);
        $this->email->message($message);

        if ($this->email->send()) {
            echo 'Your Email has successfully been sent.';
        } else {
            show_error($this->email->print_debugger());
        }
    }
}

ここに、

  • class EmailController extends CI_Controller {…} は、親 CodeIgniter コントローラーを拡張する電子メール コントローラーを定義します。
  • public function __construct() {…} は、親コンストラクターのメソッドを呼び出す子コンストラクターを定義します。
  • public function Index() {…} コンタクトフォームを表示するインデックスメソッドを定義します
  • function send() {…}はメールを送信するメソッドを定義します
    • $this->load->config('email'); メール設定を読み込みます
    • $this->load->library('email'); はメールライブラリをロードします
    • $from = $this->config->item('smtp_user'); は、定義した電子メール構成ファイルから送信者 ID を取得します。
    • $to = $this->input->post('to'); 送信されたフォームから to 値を取得します
    • $subject = $this->input->post('subject'); フォームからメールの件名を設定します
    • $message = $this->input->post('message'); フォームからのメールメッセージを設定します
    • $this->email->set_newline(“\r\n”); メールの改行文字を定義します
    • $this->email->from($from); 送信者のメールアドレスを設定します
    • $this->email->to($to); 受信者のメールアドレスを設定します
    • $this->email->subject($subject); メールの件名を設定します
    • $this->email->message($message); メールメッセージを設定する
    • if ($this->email->send()) {…} は、電子メールの送信を試みます。電子メールが正常に送信された場合は、「Your Email has successfully been sent」というメッセージが表示され、そうでない場合は、何が問題だったのかを示すデバッグ情報が出力されます。

メールのルートを定義しましょう

メールルート

application/config/routes.phpに以下のルートを追加します。

$route['send-email'] = 'EmailController';
$route['email'] = 'EmailController/send';

Webブラウザに連絡先フォームをロードできるようになりました

組み込みの PHP サーバーを起動しましょう

ターミナル/コマンド ラインを開き、アプリケーションのルートを参照します。 私の場合、ルートはドライブ C:\Sites\ci-app にあります。

cd C:\Sites\ci-app

次のコマンドを使用してサーバーを起動します

php -S localhost:3000

Web ブラウザに次の URL を読み込みます。 http://localhost:3000/send-email

次のフォームが表示されるはずです

メールルート

受信者のメール アドレス、件名、メール メッセージを入力し、[メールの送信] をクリックします。メールの設定が適切に行われていれば、成功メッセージが表示されます。

製品概要

組み込みの電子メール ライブラリを使用すると、最小限のコードで簡単に電子メールを送信できます。また、ライブラリは要件に合わせて構成できるという点で非常に柔軟です。