这是Byron Jones (https://www.glob.com.au/sendmail/) 的假sendmail程序的复兴,如果您不需要TLS v1.1或v1.2支持,请使用原始版本,这两个版本都没有可用的支持,并且都没有得到积极维护。
sendmail.exe 是一个简单的 Windows 控制台应用程序,它模拟 sendmail 的 -t 选项来通过标准输入传送电子邮件。
它的目的是简化运行将 /usr/lib/sendmail 硬编码为电子邮件传递方式或使用 sendmail 管道方法的程序的 UNIX 代码,例如 Windows 上的 php 使用。
它不支持延迟传递,并且需要 smtp 服务器来执行消息的实际传递。
我已经使用假sendmail程序很多年了,但是当使用Office 365 smtp服务器时,TLS v1.0已经不够了,他们需要TLS v1.2,所以我尝试重新编译Byron Jones的源代码包含在他的网站上的发布中。经过一些小修改和一些小的更改,我能够在 Embarcadero 的 Delphi builder 10.3 (Rio) 当前社区版本中重新编译 Delphi 2007 程序。其中包含较新的 Indy 版本,支持 TLS v1.2 并在 sendmail 代码中强制使用 TLS v1.1+。
为了避免其他人从源代码重新编译伪造的 sendmail 的麻烦,我在这个 github 站点上提供了它,包括源代码,就像原始版本一样。
从这个 github 下载 sendmail.zip 并将其内容解压到系统上的临时文件夹中
将 sendmail.exe、sendmail.ini 和两个 .dll 文件复制到安装 UNIX 应用程序的驱动器上的 usrlib 中。例如。如果您的应用程序安装在 c: 上,则需要将 sendmail.exe 和 sendmail.ini 复制到 c:usrlibsendmail.exe 和 c:usrlibsendmail.ini 或其他目录(如果路径不是)没有在使用它的应用程序中进行硬编码。
在sendmail.ini中配置smtp服务器和默认域。
一般来说,您需要做的就是在 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。该值已更改,以提供与 PHP 更好的兼容性,PHP 预计失败时 ERRORLEVEL 为 -1。
取消注释 sendmail.ini 中的 debug_logfile 条目并尝试重新发送失败的消息。这应该在与 sendmail.exe 相同的目录中创建 debug.log,显示完整的 SMTP 记录。
请参阅原始版本网站:https://www.glob.com.au/sendmail/
该程序在 bsd 许可证下发布:https://www.glob.com.au/sendmail/license.html
许可证详细信息和完整源代码 (Delphi 10.3 Rio) 包含在 zip 文件和此存储库的源文件夹中。