【问题标题】:Separate email messages are being combined正在合并单独的电子邮件
【发布时间】:2017-09-20 16:56:54
【问题描述】:

我正在尝试使用数据库中的数据使用 PHP 发送电子邮件。我遇到的问题是电子邮件正在为每个后续结果匹配合并。 因此,如果我有 3 个具有相同匹配标准的用户,例如是/是,第一封电子邮件是干净的,第二封电子邮件包含第一封然后是第二封电子邮件的内容,第三个收件人包含第一封,第二封,然后是第三封。我不确定它为什么要合并消息,但显然希望它停止。 :-)

<?php
$servername = "intentionally empty";
$username = "intentionally empty";
$password = "intentionally empty";
$dbname = "intentionally empty";
$tblname = "intentionally empty";
$email_to = "";
$email_subject = "";
$email_message = "";
$email_from = "";

        $conn = mysqli_connect($servername, $username, $password, $dbname) or die("Unable to Connect to '$dbhost' - Please email support@domain.com");

    $sql = "SELECT * FROM $tblname WHERE Active='Yes' AND Reqested='Yes'";
    $result = mysqli_query ($conn, $sql);
    if (!mysqli_query($conn, $sql))
    {
        echo "Error: " . mysqli_query_error();
    }

    while($row = mysqli_fetch_array($result)){
        $first_name = $row['First'];
        $last_name = $row['Last'];
        $dob = $row['DOB'];
        $variableA = $row['VarA'];
        $variableB = $row['VarB'];
        $email_to = $row['Email'];

    $email_from = "support@domain.com"; 
    $email_subject = "Reminder: Requested information for $dob - $varA";
    $email_intro .= "Hello $first_name $last_name,\n";
    $email_intro .= "\n";
    $email_intro .= "This is your monthly request reminder that for $dob - $varA\n";
    $email_intro .= "\n";
    $email_var .= "If you have already sent your updates then you can disregard.\n";
        $email_end .= "\n";
    $email_end .= "Please let us know if you have any question.\n";
    $email_end .= "\n";
    $email_end .= "Thank you,\n";
    $email_end .= "Management.\n";

    $email_message .= "$email_intro$email_var$email_end";

// create email headers
if (@mail($email_to, $email_subject, $email_message, 'From:' . $email_from));

echo 'Email sent to: ' . $email_to. '<br>';

}

?>

【问题讨论】:

    标签: php database email mysqli


    【解决方案1】:

    您不会在循环开始时重置 $email_message$email_intro 变量。添加

    $email_message = $email_intro = '';
    

    while() 循环的顶部,每次迭代都会清除它。

    【讨论】:

    • 那么 while() 上面的那一行?我以前遇到过同样的问题。刚试了一下,把所有变量都放在那一行,结果一样。第一封电子邮件很好,随后的电子邮件被合并/混乱。
    • 电子邮件现在比堆积如山更混乱。电子邮件 1 是正常的。电子邮件二有第一个收件人的 $email_intro,然后是第二个收件人的 $email_intro,$email_var,然后是 $email_end 的相同顺序
    • 有点晚了,但我打算将它添加为第一行inside循环。在你的脑海中处理代码 - 如果你只在循环开始之前重置变量,那么每次迭代都会产生越来越长的电子邮件,因为你总是在介绍和消息中添加新文本。您需要在每次连续迭代后将它们设置回 null(或空字符串) - 这可以在循环的顶部或底部,但它需要在循环内部发生。
    【解决方案2】:

    发布成功的电子邮件发送消息,您可以重新初始化或设置变量$email_message as Null的值。

    【讨论】:

    • 谢谢,成功了。知道为什么在循环之前和成功脚本之后会改变事情吗?
    • @Kevin,当您使用 string operators 作为变量时。它将包含整个文本,直到您再次使其为空。所以在你提交的代码中,在发送邮件后,它不会将变量值设置为null,而是保留以前的数据,以后添加新的数据等等
    • @Imran Adbur Ra​​him,谢谢。我明白这一点,但我想知道为什么在成功消息之后设置为 null ,但在循环之前设置为 null/'' 不起作用?纯粹出于好奇,因为它运行正常。
    • 不仅是 `after Success message` ,你可以在循环开始后将其设置为空。重要的是,当它进入循环时,它不使用以前的任何东西(如果它没有得到要使用的命令)。它实际上不仅是循环,当程序运行时,它们不会执行先前的代码,直到它们获得先前代码的命令(先前的代码已经执行)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 2013-06-21
    • 2020-12-11
    • 2017-09-01
    相关资源
    最近更新 更多