gpt4 book ai didi

php - MySQL、PHP - 从 mysql 检索数据并通过电子邮件发送

转载 作者:行者123 更新时间:2023-11-29 19:37:50 25 4
gpt4 key购买 nike

我有以下 cod,它基本上发送一 strip 有来自 MySQL 的一些用户数据的消息。现在的问题是,有问题的电子邮件有时会发送,但如果我需要重新发送,则不会。这是代码:

<?php
//including the database connection file
include("config.php");
//getting id of the data from url
$id = $_GET['id'];

//fetching data in descending order (lastest entry first)
$result = mysql_query("SELECT * FROM my_table_name Where id='$id'");

if($res = mysql_fetch_array($result)) {
$name = $res['name'];
$email = $res['email'];
$date = $res['date'];

if(empty($id)) {
echo "<font color='red'>Error: Did not send.</font><br/>";
} else {

// The message
$message = "Hi $name,\r\n\r\nThis email is to inform you that your
\r\n\r\nRegards, \r\n Me.";



$headers = 'From: no-reply@mydomain.org' . "\r\n" .
'Reply-To: no-reply@mydomain.org' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

$Subject = 'Hello';

// Send
mail($email, $Subject, $message, $headers);
//display success message
echo "<font color='green'>Email sent successfully to $name.</font><br/>";
echo "<br/><a href='index.php' class='button button1 link'>Go Back to Overview</a>";
}
}
?>

非常感谢任何帮助。

最佳答案

如果我正确理解你的问题,并且它是关于mail函数调用有时失败的:

您可以向邮件调用添加重试逻辑:

$triesLeft = 5;
while ($triesLeft > 0) {
$rc = mail(...);
if ($rc === true) {
break;
}

sleep(1); // Space to improve here - see exponential backoff, for instance
$triesLeft -= 1;
}

if ($triesLeft === 0) {
// Log critical error
}

但这可能会导致响应时间延迟,在某些情况下客户端甚至会超时。

因此,通常解决此问题的方法不是立即发送电子邮件,而是快速将其放入任何类型的队列中(即使是简单的数据库表就足够了),然后制作另一个工作脚本来发送所有邮件未发送。

您可以将此重试逻辑移至此工作脚本并随心所欲地休眠,它不会阻止客户端。

此解决方案的唯一“缺点”是:

  1. 您将无法向您的客户显示 mail 调用的结果(无论如何这都是无用的,因为它仅意味着“已接受交付”,而不是实际交付),并且<
  2. 您将有更多的事件部件,并且必须编写更多的代码。但要么是这样,要么接受您的某些邮件调用将会失败。

解决方案的概要可能是:

form.php (gets called when customer submits form):

get request parameters
form email subject, body from request parameters
save email to db with status = unsent

worker.php (should be always running in an infinite loop or something like that in background on server):

get unsent email from db
try to send it, retrying if needed
if sent successfully - mark email as sent
if failed to send - mark email an failed, log critical error, mitigate manually

关于php - MySQL、PHP - 从 mysql 检索数据并通过电子邮件发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41482073/

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