qbmail

Githubより、qdmail.phpとqdsmtp.phpをダウンロードします。
Github QdmailをPHP7.0に対応させる

require_once('vendor/qdmail.php');
require_once('vendor/qdsmtp.php');
$mail = new Qdmail();
$mail -> errorDisplay(false);
$mail -> smtp(true);

$param = array(
	'host' => 'xxxxx.xsrv.jp',
	'port' => 587,
	'from' => 'hoge@foo.xsrv.jp',
	'protocol' => 'SMTP_AUTH',
	'user' => 'username',
	'pass' => 'password'
);
$mail -> smtpServer($param);

なんか、本家のサイトがあるようなんだが、更新が2008年で止まっている模様。なんだこれは。。
http://hal456.net/qdsmtp/download
qdはあまりニーズがないのかな。

laravelの.envでsmtpを設定

# 初期値

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

# mailtrap.ioから、usernameとpasswordを取得して.envを編集
# password reset buttonを押下

Expected response code 250 but got code "530", with message "530 5.7.1 Authentication required

う。。。

# キャッシュクリア
[vagrant@localhost angel]$ php artisan config:cache
Configuration cache cleared!
Configuration cached successfully!

# 再度password reset buttonを押下

# mailtrapで確認

なるほど。

Laravelでmailを送信する!?

どうやらconfの中の、mail.phpを編集するようだ。

'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'from' => [
        'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
        'name' => env('MAIL_FROM_NAME', 'Example'),
    ],
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),

routs/web.php

Route::get('/', function(){
	$data = [];
	Mail::send('emails.welcome', $data, function($message){
		$message->to('hogehoge@gmail.com')->subject('title')
	});
});

ふーん、こんな感じか。。

Writing Reply-to for mail sending

1.From, 2.Reply-to, 3.CC, 4.BCC, 5.Reply-to

mb_language("Japanese");
mb_internal_encoding("UTF-8");

$email = "xxx@example.com";
$subjet = "test";
$body = "this is test \n";
$to = 'yyy@example.com';
$header = "From: $email\nReplay-To: $email\n";

mb_send_mail($to; $subject, $body, $header);

smtp(postfix)のログの場所

Linuxのsmtpのログの場所は…
/var/log/maillog-yyyymmddにある
apacheのアクセルログ、エラーログと同じ場所にありますね。

では、このmaillog-yyyymmddの中身を見てみましょう。

Dec 17 22:12:09 localhost postfix/postfix-script[4238]: starting the Postfix mail system
Dec 17 22:12:10 localhost postfix/master[4247]: daemon started -- version 2.6.6, configuration /etc/postfix
Dec 18 22:54:04 localhost postfix/postfix-script[15528]: stopping the Postfix mail system
Dec 18 22:54:04 localhost postfix/master[4247]: terminating on signal 15
Dec 20 00:32:55 localhost postfix/postfix-script[1928]: starting the Postfix mail system
Dec 20 00:32:55 localhost postfix/master[1929]: daemon started -- version 2.6.6, configuration /etc/postfix
Dec 22 21:33:09 localhost postfix/postfix-script[1885]: starting the Postfix mail system
Dec 22 21:33:10 localhost postfix/master[1886]: daemon started -- version 2.6.6, configuration /etc/postfix

“starting the Postfix mail system”と、”daemon started — version 2.6.6, configuration /etc/postfix”が多いですね。特に異常なし。

mb_send_mailでメールフォーム

投信の会社などは、メールフォームがないのがトレンドのようですが、
さて、mb_send_mailを使います。vagrant postfixで設定している為、fromの挙動が異なります。

form.php

<title>Form</title>
<body>
	<form action="send.php" method="post">
	件名:<br>
	<input type="text" name="subject" size="30" value=""/><br>
	送信者名:<br>
	<input type="text" name="name" size="30" value=""/><br>
	メールアドレス:<br>
	<input type="text" name="mail" size="30" value=""/><br>
	本文:<br>
	<textarea name="message" cols="30" rows="5"></textarea><br>
	<br>
	<input type="submit" value="送信する"/>
	</form>
</body>

send.php

<?php

$message = "名前:" .htmlspecialchars($_POST&#91;"name"&#93;)."\n本文:".htmlspecialchars($_POST&#91;"message"&#93;);
if(!mb_send_mail("hoge@gmail.com", $_POST&#91;"subject"&#93;, $message, "From:".$_POST&#91;"mail"&#93;)){
	exit("error");
}
?>
<p>メールが送信されました</p>

php-imapのインストール

Postfixのdependency(remi)を解消してsudo yum install php-imap後、php.iniでextension=imap.soを追加しても、
全くphpinfo()に反映されず、vagrant haltしたり、php.iniを編集したり、
他のサイトを見ながら5時間くらい色々試しても全然ダメで、
あきらめてカタ焼きそば食って再度vagrant upしてみたら、入っている!? 何故だ? さっぱりわからん。

とりあえずエラーは出ない模様

$imapPath = '{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX';
$username = 'hoge@gmail.com';
$password = 'pass';
 
// try to connect
$inbox = imap_open($imapPath,$username,$password) or die('Cannot connect to Gmail:'.imap_last_error());
$mailHost = 'imap.googlemail.com';
$mailPort = 993;
$mailAccount = 'hoge@gmail.com';
$mailPassword = '';
$mailBox = imap_open('{' . $mailHost . ':' . $mailPort . '/novalidate-cert/imap/ssl}' . "INBOX", $mailAccount, $mailPassword);
if (!$mailBox) {
	echo '接続失敗';
}
echo '接続成功';

あれあれあれ

vagrantでのメール送受信

サーバーにグローバルなドメインが設定されていない場合、送受信できないとのこと。理由として、mail.hoge.localのドメインがLAN内のみ有効で世界のインターネット上では名前解決出来ない為。

個人情報に関わるからでしょうか、かなり厳しいですね。。

IMAPとは?

Internet Message Access Protocol(インターネット・メッセージ・アクセス・プロトコル)
メールを取り込む手順

->「POP」では、メールをいったんスマホやパソコンにダウンロードして取り込むと、サーバーから無くなってしまう
->「IMAP」では、ダウンロードするのはメールのコピー(キャッシュ)で、メール本体はサーバーに残ったまま

とりあえず、gmailのimapをonにします。

う~ん。。。