DX推進をサポートする情報サイト

 お問い合わせ 
プロフィール
技術者向け技術情報
TOP >技術者向け技術情報

【PHP】メールの送信

2022-07-05
 メールにてアラート通知を送信しようとしたがうまくいかず、google先生に聞いても情報はたくさんあるのですが あらゆるサイトを確認しながら苦慮しました。理由は、サンプルのソースに記述間違いがあったり、そもそも自分自身の技術理解度が 低いことが要因でした。そのためソースも一つのプログラムファイルとして準備し、 まずは利用している環境で動かせることを目指しご紹介します。
<利用環境準備>
 phpmailerをダウンロードしサーバ環境にコピーする。
ダウンロードは GitHub PHPMailer のサイトより行います。

緑の「Code」をクリックし
Download Zip を選択する
 ダンロードするとフォルダ名は、「PHPMailer-master」なります。これを「PHPMailer」に変更します。
配置場所は、ドキュメントルートの直下(例:/www/もしくは、lamppは/htdocs/)へフォルダーごとコピー
します。

<メール送信サンプルプログラム>send.php
<?php

	use PHPMailer\PHPMailer\PHPMailer;
	use PHPMailer\PHPMailer\Exception;

	$mail = new PHPMailer(true); 

	$mail_host = 'smtp.office365.com';	//利用している送信サーバを指定
	$user = 'test@sample.jp';			//認証ユーザアドレス
	$pass = '*********';				//認証ユーザパスワード
	$from = 'test@sample.jp';			//送信元メールアドレス

	try{
		//メール設定
		$mail->isSMTP();
		$mail->SMTPAuth = true;
		$mail->Host = $mail_host;
		$mail->Username = $user;
		$mail->Password = $pass;
		$mail->SMTPSecure = 'tls';
		$mail->Port = 587;				//利用しているポート番号を指定
		$mail->SMTPOptions = array(		//メールサーバの仕様に合わせて設定
			'ssl' => array(
			'verify_peer' => false,
			'verify_peer_name' => false,
			'allow_self_signed' => true
				)
			);
		$mail->CharSet = "utf-8";
		$mail->Encoding = "base64";
		$mail->setFrom($from);
		$mail->addAddress($to);			//メール送信先
	//	$mail->addCC($cc);				//CC送信先
		$mail->Subject = $subject;		//件名
		$mail->Body    = $body;			//本文
		
		$mail->send();					//メール送信
			echo '成功';
	}

	catch (Exception ) {
			echo '失敗: ', $mail->ErrorInfo;	//エラー情報表示
			echo ;
	}
?>
						

<メール送信サンプルプログラム>mail.php
<?php

	//PHPMailerライブラリー読込
	include($_SERVER['DOCUMENT_ROOT'].'/PHPMailer/src/Exception.php');	
	include($_SERVER['DOCUMENT_ROOT'].'/PHPMailer/src/PHPMailer.php');
	include($_SERVER['DOCUMENT_ROOT'].'/PHPMailer/src/SMTP.php');

	//<送信内容>
		$to = '送信先@sample.jp';
		$cc = 'cc送信先@sample.jp';
		$subject = 'ご挨拶';
		$body ='〇〇様

いつもお世話になります。
この度は色々とありがとうございました。
今後ともよろしくお願います。

=========
管理人
';

	include($_SERVER['DOCUMENT_ROOT'].'/mail/send.php');    //メール送信

?>
						
 ドキュメントルートの直下に mail というフォルダーを作成します。。
次に、上記2つサンプルプログラム(mail.phpとsend.php)をこの作成したmailフォルダーに配置します。
尚、変数(ユーザ、メールサーバ等)はご自身の環境に合わせてください。
あとは、ブラウザより http://******.**.**/mail/mail.php を起動させることにより送信されます。

※今回send.phpにメールの環境(ユーザ情報やパスワード)を記載してますが、セキュリティーの観点にてこのような情報はドキュメントルートより 上位のフォルダーに配置して、include()で呼び出して利用することをお勧めします。

<cc送信の対応>

 CCにて送信をする場合は、send.phpのPGの// $mail->addCC($cc);より //を削除してください。
$CCにメールアドレスの代入が無いとエラーになり送信できません。

<複数の送信先対応>

 $to を下記のように複数送信先を設定し、$mail->addAddress($to);を下記のように書き替えて下さい。
CCも複数送信先がある場合は、同様に対応します。
//	例)カンマで区切る場合
	$to = '送信先1@sample.jp,送信先3@sample.jp';
	$to = explode(','$to);
for ($i = 0; $i < count($to); $i++) {
	$mail->addAddress($to[$i]);
}

//	例)arrayの場合
	$to = array
			(
				'送信先1@sample.jp'
				,'送信先2@sample.jp'
			};
for ($i = 0; $i < count($to); $i++) {
	$mail->addAddress($to[$i]);
}
												

<添付ファイルの送信対応>

$mail->AddAttachment($file);の記述を$mail->send();の上部分に追加して下さい。
下記のサンプルは、添付が設定されているか否か、複数(array)か否かの判定も追加してます。
$file はファイルがあるパスからファイル名までを指定して下さい。
			
if (!empty($file)) {
	if (is_array($file)) {
		for (54 = 0; 54 < count($file); $i++) {
			$mail->AddAttachment($file[$i]);
		}
	} else {
			$mail->AddAttachment($file);
	}
}