PHPのPEAR Mailを使用してSMTP経由でメール送信

SMTP経由
2014/01/10

SMTP経由でメール送信

概要

PHPのPEARモジュール、Mailを使用して、SMTP経由でメールを送信する方法を紹介しています。

通常では、PHPのmb_send_mail関数などを使用すると、Webサーバーからメールが送信されます。
php.ini のSMTPを変更することで、別のSMTPサーバーからメールを送信することができます。

しかし、php.iniは変更したくない、プログラムの中でSMPTを指定したい、ということも良くあります。
そういった時のために、プログラムでSMTPを指定してメールを送信する方法を掲載します。

SMTPとは

SMTPとは、インターネットなどで電子メールを送信するためのプロトコルです。
プロトコルとは、コンピューター同士が通信をするための手順や規約のこと。

サーバー間でメールを転送する際に、もっとも広く利用されています。
通常はTCPのポート番号25を利用します。

サンプルコード&手順

環境作成

PEAR Mail から、Mailモジュールをダウンロードします。
ダウンロードしたファイルを展開して、Mail.phpとMailディレクトリをWebサーバーの任意の箇所に配置します。

例:
/home/pbtimes/pear/Mail/
/home/pbtimes/pear/Mail.php

メール送信メソッドの作成

下記はメールを送信するためのメソッドのサンプルとなります。


class Sendmail
{
	public function mail_sender($to, $subject, $body)
	{
		require_once '/home/pbtimes/pear/Mail.php';  //[Mail.phpのパス]

		$mail_from = 'info@pb-times.jp';  //メールのFromアドレス
		$SMTP = 'xxx.xxx.xxx.xxx';  SMTPサーバーのホスト

		$org = mb_internal_encoding();
		mb_internal_encoding("ISO-2022-JP");
		$subject = mb_encode_mimeheader(mb_convert_encoding($subject, "ISO-2022-JP", "UTF-8"),"ISO-2022-JP","B","¥r¥n");
		mb_internal_encoding($org);

		$body = mb_convert_encoding($body, "ISO-2022-JP", "UTF-8");

		$params = array(
			"host" => $SMTP,
			"port" => "25",
			"auth" => false,
			"username" => "",
			"password" => "",
			"sendmail_args" => "f"
		);

		$mailObject = Mail::factory("smtp", $params);

		$headers = array(
			"To" => $to,
			"From" => $mail_from,
			"Subject" => $subject,
			"Return-Path" => $mail_from
		);

		$mailObject->send($to, $headers, $body);
	}
}

送信処理

作成したメソッドを使用して、メールを送信します。


$to = "to@pb-times.jp";  //送信先アドレス
$subject = "件名";
$body = "内容";

$sendmail = new Sendmail();
$sendmail->mail_sender($to, $subject, $body);  //送信
Related

Vagrant+Docker+PHP環境で「session.save_path」指定時に、セッションファイルが空になるエラー

ファイル共有でのフォルダの所有者を設定 結論 PHP5.4.28 からセッションファイルのownerはrootもしくはWebサーバのユーザに限るという制限が...

LINEと連携したテイクアウト事前注文システム徹底比較!

目次 テイクアウト予約・注文受付システムのトレンド LINEと連携したテイクアウト事前注文システムの価格表 L.B.B.Cloud テイクイーツ ...

PHPで動画の撮影日を取得

PHPで動画の撮影日を取得 概要 PHPからffprobeコマンドを実行し、動画の撮影日時を取得します。 コード $posted_at = ...

FullCalendarでGoogleカレンダーのようなUIを実装

jQueryプラグインFullCalendarのサンプル 概要 FullCalendarを使用して、GoogleカレンダーのようなUIを実装する使用例を...

PHP Laravel5.2でmulti-auth(複数テーブルでの認証)を実装

Laravel5.2でマルチ認証 概要 LaravelとはPHPの中で今最も伸びているフレームワークです。 処理速度が遅いなどありますが、かなり使い安く拡...

PHP 正規表現でIPアドレス形式の文字列か判定

正規表現でIPアドレスの入力チェック 概要 フォームで入力されたIPアドレスが正当な文字列か判定するためのバリデーション処理を実装します。 基本的...
トップへ戻る