以前の記事で「MT4を動かすVPSをLinux OS (Ubuntu 18.04 LTS) にする方法」を書きましたが、その残課題である《MT4からEメール通知機能が動作しない問題》を解決しましたので、本記事ではその対応方法を紹介します!!
【元々の問題は何だっけ?】
元記事にも書いていますが、元々の問題は (Windowsと同じ設定をしても)『Mail: login to smtp.gmail.com:465 failed』と表示されてEメール送信に失敗するでした。
さて、この問題はどうやって解決しましょう・・・。
【Eメール通知機能を動作させる方法】
MT4のログを見てみましたが、なぜSMTPサーバへのログインに失敗するのか 手掛かりが得られなかったため、Canaryは 中継サーバを構築してそこから送信してしまえ という方法で解決 (…と言うより回避) しました。
ある意味ズルですw
中継サーバのソフトには Postfix を使用します。
具体的な対応手順
SMTPサーバにGmailサーバを使用した場合を例として、具体的な対応手順を記載します。
- 前段として必要な『GmailアカウントのSMTPアクセスを有効にする方法』については、こちらのサイト(外部) を参照してご対応ください。※この対応はWindowsの場合でも必要です。
中継サーバ (Postfix) のインストールと設定
まずは必要なソフトをインストールします。
$ sudo apt install -y postfix libsasl2-modules mailutils
- 「mailutils」は中継サーバに直接必要はありませんが、メール送信の動作確認用にインストールします。
- インストール途中で「Postfix Configuration」画面が表示された場合は、『Internet Site』を選択してください。
次に、インストールした「Postfix」を中継サーバとして設定します。
$ sudo vi /etc/postfix/main.cf
で以下を追記します。
inet_interfaces = loopback-only default_transport = smtp relay_transport = smtp smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_sasl_tls_security_options = noanonymous smtp_tls_security_level = encrypt smtpd_timeout = 5s header_size_limit = 4096000 header_checks = regexp:/etc/postfix/header_checks relayhost = [smtp.gmail.com]:587
- 12行目で、最終アクセス先のGmailサーバのポート番号を (Windowsで設定していた465番ではなく) 587番 に設定していますが、設定している認証方法に合わせるためになります。
- SMTPサーバの都合等で465番にする必要がある場合は、認証方法も適宜変更ください。#Canaryは465番だとうまく行きませんでした… (汗)
以下も追加実行して、Postfixの設定と起動は完了です。
sudo sh -c "echo '[smtp.gmail.com]:587 youraccount@gmail.com:yourpassword' > /etc/postfix/sasl_passwd" sudo sh -c "echo '/^From:(.*)$/ PREPEND References: <dummy@foobar>' >> /etc/postfix/header_checks" sudo chmod 600 /etc/postfix/sasl_passwd sudo postmap /etc/postfix/sasl_passwd sudo systemctl start postfix
- 1行目の「youraccount」と「yourpassword」は、ご自分のGmailアカウントの情報に適宜置き換えください。
- 2行目は送信メールの「Referencesヘッダ」を固定値に置き換えるための措置です。これにより、以下に示すように (同じ差出人・件名の) 受信メールがGmail上で1つのスレッドにまとまってくれて便利です。
そして最後に「mailutils」を使ってメール送信確認を行います。
$ echo TESTTEST | mail -s "TEST" -r youraccount1@gmail.com youraccount2@gmail.com
- 上記の「youraccount1」(送信元)、「youraccount2」(送信先)は、適宜変更願います。
- 件名が「TEST」、本文が「TESTTEST」のメールが届けば中継サーバの構築は成功です。
- いきなり下のMT4ソフトで確認してしまっても構いませんが、うまく行かない場合は本方法で問題の切り分けが出来ます。
MT4ソフトの設定
MT4のPCアプリ側は以下のように設定します。
- Gmailサーバへのアクセス情報は上述のPostfix側に設定されているので、Poftfixにアクセスするための情報のみ設定すればOKです。
設定項目 | 設定内容 |
---|---|
SMTPサーバー | 『localhost:25』を設定する |
SMTPログインID | @入りのダミーのアドレスを設定する |
SMTPパスワード | 空欄でOK |
発信元 | 送信元のメールアドレスを設定する |
送信先 | 送信先のメールアドレスを設定する |
「テスト」ボタンを押してメールが届けば全て完了!
トラブルシューティング
メールが届かない場合、色々な原因が考えられますが、Canaryが実際にハマった2点とその対策を記載しておきます。
■原因①:Gmailアカウントのセキュリティ設定が正しくない。
- 対策手順
- 該当アカウントでGmailにログイン。
- https://myaccount.google.com/security にアクセス。
- 『2段階認証プロセス』がONになっていたらOFFにする。
- 『安全性の低いアプリのアクセス』がOFFになっていたらONにする。
■原因②:(試行錯誤で何度もGmailにアクセスしたことにより) Gmailアカウントへのアクセスがブロックされてしまっている。
- 対策手順
- 該当アカウントでGmailにログイン。
- https://www.google.com/accounts/DisplayUnlockCaptcha にアクセスする。(https://support.google.com/mail/?p=BadCredentials に記載の正式な手順です。)
- 『次へ』ボタンを押す。
【まとめ】
『Linux (Ubuntu 18.04 LTS) 上でEメール通知機能を動作させる方法』をご紹介いたしました。
間違いや動かない等のご報告は、下のコメント欄かTwitterまでご連絡頂けたら幸いです。
できるはずのことができないとモヤモヤしますよね~。本件の解決には結構時間掛かりましたが、だいぶスッキリしましたw
コメント