laravelのartisan authでsmtpの設定が必要とのことで、mailtrapに行きます。
https://mailtrap.io

Githubアカウントで登録します。


サインインするとmailboxが表示されます

するとsmtp、pop3が表示されます

おおおおおおおおおおおおおおお、what’s a nasty!
ソフトウェアエンジニアの技術ブログ:Software engineer tech blog
随机应变 ABCD: Always Be Coding and … : хороший
laravelのartisan authでsmtpの設定が必要とのことで、mailtrapに行きます。
https://mailtrap.io

Githubアカウントで登録します。


サインインするとmailboxが表示されます

するとsmtp、pop3が表示されます

おおおおおおおおおおおおおおお、what’s a nasty!
どうやら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')
});
});
ふーん、こんな感じか。。
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);
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を使います。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["name"])."\n本文:".htmlspecialchars($_POST["message"]);
if(!mb_send_mail("hoge@gmail.com", $_POST["subject"], $message, "From:".$_POST["mail"])){
exit("error");
}
?>
<p>メールが送信されました</p>

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 '接続成功';
あれあれあれ

サーバーにグローバルなドメインが設定されていない場合、送受信できないとのこと。理由として、mail.hoge.localのドメインがLAN内のみ有効で世界のインターネット上では名前解決出来ない為。
個人情報に関わるからでしょうか、かなり厳しいですね。。
Internet Message Access Protocol(インターネット・メッセージ・アクセス・プロトコル)
メールを取り込む手順
->「POP」では、メールをいったんスマホやパソコンにダウンロードして取り込むと、サーバーから無くなってしまう
->「IMAP」では、ダウンロードするのはメールのコピー(キャッシュ)で、メール本体はサーバーに残ったまま
とりあえず、gmailのimapをonにします。

う~ん。。。
1.インストール
sudo yum install -y dovecot
2.バックアップ
sudo cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.org
3.maildir形式
mail_location = maildir:~/Maildir

4.起動
sudo service dovecot start
smtpサーバーをsmtp.gmail.comで設定している場合、dovecot入れても意味ないのかな。
作りたいのはメールボックスそのものなんだが。
複数アドレス($addressの配列)をforeach の$mail->addBCC($value);で回せばOKですね。
$mail->addAddress(”);、$mail->addCC(”);は使わなければ、コメントアウトします。
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'vendor/autoload.php';
$address = array('target1@gmail.com','target2@hotmail.com','target3@yahoo.co.jp');
$mail = new PHPMailer(true);
try{
$mail->SMTPDebug = 2;
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = 'fromhoge@gmail.com';
$mail->Password = 'app pass';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
$mail->setFrom('fromhoge@gmail.com');
// $mail->addAddress('');
// $mail->addCC('');
foreach($address as $value){
$mail->addBCC($value);
}
$mail->addAttachment('test.gif');
$mail->isHTML(true);
$mail->Subject = 'Here we comes!';
$mail->Body = 'This is the HTML message body <b>in bold</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML';
$mail->send();
echo 'messeage has been sent';
} catch (Exception $e){
echo "Message could not be send, Mailer Error:", $mail->ErrorInfo;
}
BCCで問題なく届いてます。これは想像以上だな~
