SMTPの会話を記録する

Deeplからの自動翻訳

以前の記事で約束したように、各R-releaseにはメール機能に関するより多くの進歩が含まれ、その隠れたパワーを解き放ちます。

4D v17 R5では、メールログに関する興味深い新機能が提供されています。開発中はすべてうまくいっていたのに、顧客にデプロイしたときに、メール配信に問題が発生することがあります。通信は暗号化されており、SMTPサーバのログファイルにアクセスできないことが多いため、どこで障害が発生したかを発見するのは難しいかもしれません。問題はSMTPサーバーに関連している可能性が非常に高いのですが、どうすれば確認できるのでしょうか?アプリケーションでSMTPログを開始するだけです。このログには、接続の停止を含む、実行されたすべてのアクションの記録が含まれています。さらに良いことに、このログはSMTPサーバーとの通信を暗号化されていないプレーンなテキストで表示するので、分析が容易になります。

この例では SMTP New transporterコマンドは、SMTPサーバー(exchangeやgmailなど )との接続を作成し、そのサーバーとクライアント間のすべての通信をログに記録します

SMTP通信ログの有効化

送信されたすべての電子メールについて、データベース内のSMTP通信ログを有効にするには、次のコードを使用します。

SET DATABASE PARAMETER(SMTP Log, 1)

サーバー上でSMTPログを簡単に実行するには、4Dサーバー管理ウィンドウの「リクエストとデバッグのログを開始」ボタンをクリックします。

4D Server上で実行されている全てのSMTPトランザクションは、自動的にログに記録されます。

特定のトランザクションをログする

特定のトランザクションをログに記録する必要がある場合 (例えばデバッグ時) は、SMTP オブジェクトの logFileプロパティを使用します。

$serverhost:="yoursmtpserver.com" . :="login" . :="psw" . :="C:\tmp***SMTPLog.txt"
$serveruser
$serverpassword
// Enter the path of the log file you want to create
$serverlogFile
$transporter := ( )SMTP New transporter$server

SMTP Log ファイルの例

ログの各行には、5つの情報が含まれています。

  • カウンター
  • 日付と時間
  • プロセス ID
  • 一意のプロセスID
  • クライアントからの送信文(“C >”) またはサーバーからの応答(“S <“) と応答コード、返された説明文。

以下は、不正なパスワードで接続しようとした場合の結果です。

1 2019-02-06T15:03:11.586 5 7 ### SMTP ポート 465 で 'smtp.gmail.com' に接続されました。(セキュア)
2 2019-02-06T15:03:12.142 5 7 S < "220 smtp.gmail.com ESMTP y139sm19463388wmd.22- gsmtp"
3 2019-02-06T15:03:12.143 5 7 C > "EHLO [192.168.18.9]"
4 2019-02-06T15:03:12.154 5 7 S <"250-smtp.gmail.com at your service, [195.68.52.79]"
5 2019-02-06T15:03:12.154 5 7 s < "250-size 35882577"
6 2019-02-06T15:03:12.154 5 7 s < "250-8bitmime"
7 2019-02-06T15:03:12.154 5 7 s < "250-auth login plain xoauth2 plain-clienttoken oauthbearer xoauth"
8 2019-02-06T15:03:12.154.154 5 7 s < "250-enhancedstatuscodes"
9 2019-02-06t15:03:12.161 5 7 s < "250-pipelining"
10 2019-02-06t15:03:12.161 5 7 s < "250-chunking"
11 2019-02-06t15:03:12.161 5 7 s < "250 smtputf8"
12 2019-02-06t15:03:12.171.162 5 7 C > "AUTH PLAIN"
13 2019-02-06T15:03:12.168 5 7 S < "334 "
14 2019-02-06T15:03:12.168 5 7 C > "****************"
15 2019-02-06T15:03:12.234 5 7 S < "535-5.7.8 ユーザーネームとパスワードは受け付けません
詳しくはこちら"
16 2019-02-06T15:03:12.234 5 7 S < "535 5.7.8 https://support.google.com/mail/?p=BadCredentials y139sm19463388wmd.22- gsmtp"
17 2019-02-06T15:03:12.235 5 7 C > "QUIT"
18 2019-02-06T15:03:12.242 5 7 S < "221 2.0.0 closing connection y139sm19463388wmd.22 - gsmtp"
19 2019-02-06T15:03:12.242 5 7 ### SMTP Connection closed67 2019-01-10T11:00:08.653 -5 ### SMTP Connection closed
.

ログで何が起こっているのか、詳しく見てみましょう。

  • 1行目ポート 465 で SMTP サーバーとの通信チャネルを開きます。TLS暗号化が自動的に開始され、通信が保護されます。
  • 3行目クライアントがEHLOコマンドを送信し、SMTPの会話を開始。
  • 4~11行目:サーバーは、サポートされている認証方法のリスト(7行目)を含むいくつかの構成要素を返します。
  • 12行目: クライアントは認証タイプを送信します。
  • 14行目:クライアントはログイン名とパスワードを送信する。これらはログに平文で表示されることはなく、「*」に置き換えられています。
  • 15行目、16行目:サーバーはエラー535を返します、認証に失敗しました。
  • 17行目:クライアントが「QUIT」コマンドを送信し、サーバーとの接続を閉じます。

この例でお分かりのように、通信に関する問題のトラブルシューティングが簡単にできるようになりました

ロギングを楽しんでください。

Fabrice Mainguené
- Product Owner -Fabrice Mainguenéは、2016年11月に4D Programチームに参加しました。プロダクトオーナーとして、彼はユーザーストーリーを書き、それを機能仕様に変換する役割を担っています。CNAMでコンピュータサイエンスの学士号を取得した後、FabriceはWindev開発者として小さなソフトウェア出版社に入社しました。その後、彼は産業および貿易分野のさまざまな企業で、Windev および Web 開発者として、また新機能の技術アドバイザーとして働きました。