これは、Byron Jones による偽の sendmail プログラム (https://www.glob.com.au/sendmail/) の復活です。TLS v1.1 または v1.2 のサポートが必要ない場合は、オリジナルのバージョンを使用してください。どちらのバージョンでもサポートは提供されておらず、どちらも積極的にメンテナンスされていません。
sendmail.exe は、sendmail の -t オプションをエミュレートして、標準入力経由でパイプされた電子メールを配信する単純な Windows コンソール アプリケーションです。
これは、電子メール配信手段としてハードコーディングされた /usr/lib/sendmail を持つ UNIX コード、または Windows 上の php などの sendmail パイプ メソッドを使用するプログラムの実行を容易にすることを目的としています。
遅延配信はサポートされていないため、smtp サーバーがメッセージの実際の配信を実行する必要があります。
私は偽の sendmail プログラムを長年使用してきましたが、Office 365 smtp サーバーを使用している場合、TLS v1.0 ではもう十分ではなく、TLS v1.2 が必要なので、Byron Jones が作成したソースを再コンパイルしようとしました。彼のサイトのリリースに含まれています。少しいじって若干の変更を加えることで、Embarcadero の Delphi Builder 10.3 (Rio) の現在のコミュニティ エディションで Delphi 2007 プログラムを再コンパイルすることができました。これには、sendmail コードで TLS v1.2 と強制 TLS v1.1+ をサポートする新しい Indy バージョンが含まれています。
他の人がソース コードから偽の sendmail を再コンパイルする手間を省くために、オリジナル バージョンと同じように、ソース コードも含めてこの github サイトで利用できるようにしました。
この github から sendmail.zip をダウンロードし、その内容をシステム上の一時フォルダーに解凍します。
sendmail.exe、sendmail.ini、および両方の .dll ファイルを、UNIX アプリケーションがインストールされているドライブの usrlib にコピーします。例えば。アプリケーションが c: にインストールされている場合、sendmail.exe と sendmail.ini を c:usrlibsendmail.exe と c:usrlibsendmail.ini にコピーするか、パスが正しくない場合は他のディレクトリにコピーする必要があります。それを使用しているアプリケーションではハードコードされていません。
smtp サーバーとデフォルトのドメインを sendmail.ini に設定します。
通常、usrlib に sendmail.exe をインストールするだけで、/usr/lib/sendmail を呼び出す既存のコードが機能します。
新しいアプリケーションをコーディングしている場合は、完全なヘッダーを含む電子メール メッセージを作成し、それを「sendmail.exe -t」にパイプするだけです。
PHP では、sendmail パスはハードコーディングされておらず、php.ini ファイルで設定できるため、sendmail.exe とそのファイルをシステム上のどこにでも一緒に配置できます。設定には、sendmail_path オプションに「Unix のみ」と記載されています。ただし、Windows では動作し、その上の 3 つの Win32 のみのオプションをオーバーライドします。PHP マニュアルを参照してください。 (https://www.php.net/manual/en/mail.configuration.php#ini.sendmail-path)
注: SMTP サーバーが認証や暗号化を必要としない場合は、SMTP および SMPT_PORT 構成パラメーターを使用して smtp サーバーを指定するだけでよく、その場合は sendmail.exe は必要ありません。
PHP.ini:
[mail function]
; For Win32 only.
; http://php.net/smtp
;SMTP = localhost
; http://php.net/smtp-port
;smtp_port = 25
; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = [email protected]
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
sendmail_path = "C:sendmailsendmail.exe -t"
; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail().
;mail.force_extra_parameters =
; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
mail.add_x_header = On
sendmail.ini では、SMTP サーバーのアドレスとユーザー名とパスワードの組み合わせを指定します。
Sendmail は、成功すると ERRORLEVEL を 0 に設定します。
バージョン 28 以降では、電子メールを配信できなかった場合、ERRORLEVEL が -1 に設定されます。この値は、失敗時に ERRORLEVEL が -1 になることが期待される PHP との互換性を高めるために変更されました。
sendmail.ini 内の debug_logfile エントリのコメントを解除し、失敗したメッセージの再送信を試みます。これにより、完全な SMTP トランスクリプトを示す debug.log が sendmail.exe と同じディレクトリに作成されます。
オリジナルバージョンのサイトをご覧ください: https://www.glob.com.au/sendmail/
このプログラムは bsd ライセンスに基づいてリリースされています: https://www.glob.com.au/sendmail/license.html
ライセンスの詳細と完全なソース コード (Delphi 10.3 Rio) は、zip ファイル内のソース フォルダーとこのリポジトリに含まれています。