gpt4 book ai didi

php - 用自定义版本替换 PHP 邮件功能

转载 作者:行者123 更新时间:2023-12-02 22:36:01 25 4
gpt4 key购买 nike

我目前正在开发一个电子邮件服务器程序,该程序将跟踪通过我的网站/网络应用程序发送的电子邮件,并重试任何可能因 SMTP 错误而失败的邮件。

我希望能够做的是替换 PHP 用于发送电子邮件的默认方法。

我已经尝试创建一个与邮件函数具有相同参数的 php 脚本,并将此脚本添加到 php.ini 文件中的 sendmail 路径,但是当我尝试这样做时,浏览器只是坐着,什么也不做。

这个想法是,用户只需要重新配置 php 就可以使用我自己的版本,而不必编写不同的代码,即他们可以使用与他们当前用于通过 php 发送电子邮件的完全相同的代码,而不是 php 做发送,它只是将我自己的版本所需的详细信息传递给电子邮件服务器。

这是可能的吗,感谢您提供的任何帮助

最佳答案

本质上,您需要创建自己的与 PHP 兼容的 sendmail 样式包装器。当 PHP 调用 sendmail 发送邮件时,它会打开一个进程,并将邮件数据写入 sendmail 中,该邮件将对邮件执行任何操作。

您需要重新解析邮件才能发送,或者在您记录/说明邮件后将其按原样转发到您的 MTA。

这是一个示例脚本,它不支持任何选项,但如果您想走这条路,应该可以帮助您入门:

#!/usr/bin/php -q
<?php

// you will likely need to handle additional arguments such as "-f"
$args = $_SERVER['argv'];

// open a read handle to php's standard input (where the message will be written to)
$fp = fopen('php://stdin', 'rb');

// open a temp file to write the contents of the message to for example purposes
$mail = fopen('/tmp/mailin.txt', 'w+b');

// while there is message data from PHP, write to our mail file
while (!feof($fp)) {
fwrite($mail, fgets($fp, 4096));
}

// close handles
fclose($fp);
fclose($mail);

// return 0 to indicate acceptance of the message (not necessarily delivery)
return 0;

此脚本需要可执行,因此将其权限设置为 755

现在,编辑 php.ini 以指向此脚本(例如 sendmail_path = "/opt/php/php-sendmail.php -t -s")

现在在另一个脚本中,尝试向邮件发送消息。

<?php

$ret = mail('drew@example.com', 'A test message', "<b>Hello User!</b><br /><br />This is a test email.<br /><br />Regards, The team.", "Content-Type: text/html; charset=UTF-8\r\nX-Mailer: MailerX", '-fme@example.com');

var_dump($ret); // (bool)true

调用之后,/tmp/mailin.txt 的内容应该包含类似于以下的内容:

To: drew@example.com
Subject: A test message
X-PHP-Originating-Script: 1000:test3.php
Content-Type: text/html; charset=UTF-8
X-Mailer: MailerX

<b>Hello User!</b><br /><br />This is a test email.<br /><br />Regards, The team.

以上txt 文件的内容基本上是您需要parse 的内容。所以您可以重新发送它,或者您可以将它直接传递给您使用的任何 MTA。请注意,在这个例子中我没有对参数做任何处理,所以不要忘记这些。

查看 man sendmail 以获取有关该过程的更多文档。 Here是指向 php.ini 中的 sendmail_path 指令的 PHP 函数的链接,它可以帮助您理解调用 mail( )

希望对您有所帮助。

关于php - 用自定义版本替换 PHP 邮件功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11438628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com