メールの送信方法 Codeイグナイター
⚡ スマートサマリー
CodeIgniter のメール送信機能は、フレームワークに組み込まれているメールライブラリを利用して、SMTP またはローカルメールサーバー経由でメッセージを配信します。この例では、メール設定ファイル、問い合わせフォームビュー、およびフォーム入力を読み取りメッセージを送信するコントローラーを作成します。
ウェブアプリケーションにおいて、メールは非常に重要です。ユーザーが登録する際、メールアドレスの確認と登録完了の確認のためにメールを送信することがあります。また、パスワードを忘れた場合のリセットや、顧客への請求書や領収書の送付にもメールを利用します。 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 など)を指定します。
- 'mailtype' => 'text' は、使用するメールの種類を設定します。必要に応じて、プレーンテキストまたはHTMLを指定できます。
- 'smtp_timeout' => '4' は、ホストへの接続試行時にタイムアウト例外がスローされるまでの経過時間を秒単位で指定します。
- 'charset' => 'iso-8859-1' は、電子メールの送信時に使用する文字セットを定義します。
- 'wordwrap' => TRUE。TRUEに設定するとワードラップが有効になります。FALSEに設定するとワードラップは無効になります。
お願い: 電子メールの送信を機能させるには、有効な構成パラメータを指定する必要があります。ダミーパラメータでは電子メールを送信できません。
CodeIgniterメールビュー
このセクションでは、受信者に電子メールを送信するビューを作成します。
アプリケーション/ビューに新しいディレクトリメールを作成する
application/views/email ディレクトリに contact.php という新しいファイルを作成します。
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(0)?>" 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 {…} は、親クラスを継承するメールコントローラを定義します。 Codeイグナイターコントローラー。
- 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()) {…} は、メールの送信を試みます。メールが正常に送信された場合は、「メールが正常に送信されました」というメッセージが表示され、そうでない場合は、何が問題だったのかを示すデバッグ情報が表示されます。
それでは、メールの経路を定義しましょう。
メールルート
application/config/routes.phpに以下のルートを追加します。
$route['send-email'] = 'EmailController'; $route['email'] = 'EmailController/send';
これで、お問い合わせフォームをウェブブラウザに読み込むことができます。
組み込みのPHPサーバーを起動しましょう。
ターミナルまたはコマンドプロンプトを開き、アプリケーションのルートディレクトリに移動します。私の場合は、ルートディレクトリはドライブ C:\Sites\ci-app にあります。
cd C:\Sites\ci-app
以下のコマンドを使用してサーバーを起動します。
php -S localhost:3000
以下を読み込んでください URL ウェブブラウザで: http://localhost:3000/send-email
次のフォームが表示されるはずです
宛先メールアドレス、件名、メール本文を入力し、「メール送信」をクリックしてください。メール設定が正しく行われていれば、送信成功メッセージが表示されます。
HTMLメールと添付ファイルを送信する方法 Codeイグナイター
同じメールライブラリで、リッチテキスト形式のメッセージやファイルを送信できます。上記のプレーンテキストの例を、添付ファイル付きのHTMLメールに変換するには、2つの小さな変更を加えるだけです。
$this->email->set_mailtype('html'); $this->email->message('<h3>Welcome</h3><p>Thanks for joining us.</p>'); $this->email->attach('/path/to/report.pdf');
- set_mailtype('html'): 本文にHTMLが含まれていることをライブラリに伝えることで、見出しやリンクなどのタグが受信者の受信トレイに表示されるようになります。
- attach(): サーバーパスにあるファイルをメッセージに追加します。send() を実行する前に、ファイルごとに一度呼び出してください。
HTMLメールには必ずプレーンテキスト版を含めるようにしてください。また、サイズの大きな添付ファイルは、厳格なメールサーバーによって拒否される可能性があることに注意してください。


