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で問題なく届いてます。これは想像以上だな~