0

我正在使用 jWordPress,它将 Quercus 和 JavaMail 1.4.1 与 WordPress 4.2.2 结合在一个 WAR 文件中,该文件在 Windows 上的 Tomcat 下执行。我在配置外发电子邮件服务时遇到问题:默认情况下,Quercus 尝试联系 localhost 端口 25 上的 SMTP 服务器,但失败了。

在 WAR 文件中,Quercus 是通过 WEB-INF/web.xml 配置的,除其他设置外,还有以下设置(我在原始文件中取消了注释):

<init-param>
  <param-name>ini-file</param-name>
  <param-value>WEB-INF/php.ini</param-value>
</init-param>

我为 AWS SES 创建了一个带有以下设置的 WEB-INF/php.ini 文件,它可以在不同的应用程序中与 JavaMail 一起正常工作(请注意,这是端口 587 上经过身份验证的 STARTTLS 连接):

[PHP]
[mail function]
SMTP = <address of the AWS SES SMTP host>
smtp_port = 587
smtp_username = <AWS SES username>
smtp_password = <AWS SES password>
sendmail_from = <a 'no-reply' email address>

上述参数的名称对应于 Quercus 的 MailModule 中的名称:

https://github.com/moriyoshi/quercus-gae/blob/master/src/main/java/com/caucho/quercus/lib/MailModule.java

WEB-INF/web.xml 文件似乎在启动时被处理,因为如果在其中引入错误,它们会反映在 Tomcat 日志以及 WordPress 操作中。但是,日志中没有任何迹象表明 WEB-INF/php.ini 已被读取或处理。

WordPress 似乎工作正常。WP 发送邮件的一个简单测试是点击 Meta 下的“Log In”,然后点击“Lost your password?”,输入 WP 用户名并点击“Get New Password”。这会导致 Tomcat 日志中出现以下警告:

10-Sep-2015 09:57:47.836 WARNING [http-nio-8080-exec-4] com.caucho.quercus.lib.mail.MailModule.mail Quercus[] mail could not send mail to '<user email address>'

Could not connect to SMTP host: localhost, port: 25

因此,看起来 Quercus MailModule 没有看到来自 php.ini 的设置。我该如何解决?

PS 请不要建议需要在 localhost 的端口 25 上安装 sendmail 或类似的解决方案。

4

1 回答 1

0

嗯,原来是指定的php.ini文件

<init-param>
  <param-name>ini-file</param-name>
  <param-value>WEB-INF/php.ini</param-value>
</init-param>

必须有一个绝对路径,而不仅仅是 WEB-INF/php.ini,例如

C:/Program Files/Apache/Tomcat/.../WEB-INF/php.ini

(我尝试了多个相对路径无济于事。)这解决了文件不被读取的问题。

然而,另一个问题出现了:php.ini 中的 'sendmail_from' 设置无效。查看上面链接中的 Quercus MailModule 代码,如果附加标头中有 'from' 设置,那么它将被使用,而根本不会使用 'sendmail_from' 设置。

无论配置的管理员电子邮件地址设置如何,Wordpress 似乎都使用“wordpress@localhost”。当此地址与远程 SMTP 主机一起使用时,电子邮件要么被拒绝 (AWS SES),要么被接受但静默丢弃 (Comcast)。我将把它作为一个单独的问题发布在 SO 上。

于 2015-09-11T01:08:00.097 回答