メールの送信方法 Codeイグナイター

⚡ スマートサマリー

CodeIgniter のメール送信機能は、フレームワークに組み込まれているメールライブラリを利用して、SMTP またはローカルメールサーバー経由でメッセージを配信します。この例では、メール設定ファイル、問い合わせフォームビュー、およびフォーム入力を読み取りメッセージを送信するコントローラーを作成します。

  • 📧 内蔵ライブラリ: このメールライブラリは、最小限のコードでメールを送信でき、SMTP、Sendmail、PHPのメール転送方式をサポートしています。
  • ⚙️ 中央設定: カスタムの email.php 設定ファイルには、プロトコル、ホスト、ポート、ユーザー、パスワードが保存されるため、設定は一箇所にまとめられます。
  • 🔓 SMTP認証情報: 有効なsmtp_host、smtp_user、およびsmtp_passの値が必要です。ダミーのパラメータでは、実際のメールは送信されません。
  • 📝 フォームからコントローラーへ: 連絡先ビューは、受信者、件名、およびメッセージを収集し、コントローラは入力ライブラリを使用してそれらを読み取ります。
  • 📤 送信フロー: コントローラは、送信元、送信先、件名、およびメッセージを設定し、send() を呼び出し、失敗した場合はデバッガ レポートを出力します。
  • 📎 HTMLとファイル: メールタイプをhtmlに変更してattach()関数を呼び出すことで、ファイル添付付きの書式設定済みメッセージを送信できます。
  • 🤖 AIアシスト: AIツールは、メールコントローラーを生成したり、フォーム入力を検証したり、デバッガーの出力からSMTP接続エラーを診断したりすることができる。

CodeIgniterがメールを送信しています

ウェブアプリケーションにおいて、メールは非常に重要です。ユーザーが登録する際、メールアドレスの確認と登録完了の確認のためにメールを送信することがあります。また、パスワードを忘れた場合のリセットや、顧客への請求書や領収書の送付にもメールを利用します。 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メールには必ずプレーンテキスト版を含めるようにしてください。また、サイズの大きな添付ファイルは、厳格なメールサーバーによって拒否される可能性があることに注意してください。

よくあるご質問

ローカルホストには通常メールサーバーがないため、メールプロトコルはサイレントに失敗します。プロトコルをsmtpに切り替えて、実際のSMTPホスト、ユーザー、パスワードを指定するか、次のようなサービスを使用してください。 Mailローカルテスト用のトラップ。

smtp_hostをsmtp.gmail.comに、smtp_portを465(SSL使用)に、smtp_userをあなたの Gmail アドレスを使用してください。 Google 通常のパスワードではなくアプリパスワードを使用するのは、 Gmail 基本的なパスワードログインをブロックします。

メールプロトコルはPHPのmail()関数を使用し、sendmailはサーバーのローカルバイナリを呼び出し、smtpは認証情報を使用して外部メールサーバーに接続します。SMTPは配信と認証において最も信頼性の高いプロトコルです。

はい。AIはコントローラーを構築し、受信者と件名のためのフォーム検証を追加し、成功処理とエラー処理を組み込むことができます。 Rev本番環境で使用する前に、SMTP設定を確認し、レート制限を追加してください。

はい。print_debugger() の出力を貼り付けると、AI が SMTP ハンドシェイクの失敗、認証エラー、ポートの問題を解釈し、試すべき正しいホスト、ポート、または暗号化値を推奨します。