mysql - MIME 电子邮件 - While 循环 - 数据库 - 错误

标签 mysql while-loop mime

已解决:安装 PHPMailer 后,它现在可以工作了。


我正在尝试使用 MIME 电子邮件向大量成员发送邮件。 看到我的网络主机对某个功能可以在其服务器上运行的时间有限制,我不得不调整旧功能。 这就是我希望它工作的方式:

  1. 从数据库表中获取每个成员的电子邮件地址,并使用所有这些电子邮件地址创建一个新表。
  2. 在新表中,我还创建了两个名为“已发送”和“错误”的属性。
  3. 我打算使用Cron关于这个功能。因此,每一行电子邮件地址最终都将设置为 Sent = True(1) 或 Error = True (1)。

只有一个问题。我尝试在 4 个电子邮件地址上进行测试。当其中之一返回错误时,以下所有电子邮件地址都会出现相同的错误。

错误消息示例:

Error: 501 : malformed address: �> may not follow **Probably caused of ÆØÅ**
Error: 501 : domain missing or malformed  **Because @service.com is missing**

等等..

输出示例:

1: Before function. Error value: 
1: After function. Error value: 501 : domain missing or malformed
2012-10-10 20:07:46 : 1: MemberID: 1, Mail:testme
Error: 501 : domain missing or malformed 

2: Before function. Error value: 
2: After function. Error value: 501 : domain missing or malformed
2012-10-10 20:07:46 : 2: MemberID: 2, Mail:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="fc88998f889199bc9b919d9590d29f9391" rel="noreferrer noopener nofollow">[email protected]</a>
Error: 501 : domain missing or malformed 

3: Before function. Error value: 
3: After function. Error value: 501 : domain missing or malformed
2012-10-10 20:07:46 : 3: MemberID: 3, Mail:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="99edfceaedf4fcd9f1f6edf4f8f0f5b7faf6f4" rel="noreferrer noopener nofollow">[email protected]</a>
Error: 501 : domain missing or malformed* 

我不明白为什么会发生这种情况。

######################################
### START NEW MAIL FUNCTION   ####
######################################
##############################################
### Deletes table if already exists   ####
##############################################


$dropExistingTable = "DROP TABLE IF EXISTS $databaseTableNameContainingMembers";
mysql_query($dropExistingTable) or die(mysql_error());

####################################
### Creating new table  ####
####################################
$queryCreateTable = "CREATE TABLE $databaseTableNameContainingMembers(ID mediumint(6) NOT NULL AUTO_INCREMENT, Mail TEXT, MailSent BOOLEAN DEFAULT 0, Error BOOLEAN DEFAULT 0, PRIMARY KEY (ID))";
mysql_query($queryCreateTable) or die(mysql_error());

####################################
### Filling new table   ####
####################################
//Now we fill the new table with all our members (MemberID, Mail, Sendt = 0).

while ($medlem = mysql_fetch_array($query_medlem)) {
    //insert all member mails to new table
    $memberMail = $medlem["Epost"];
    $queryInsertMemberToNewTable = "INSERT INTO $databaseTableNameContainingMembers (`Mail`) VALUES ('" . $memberMail . "')";
    mysql_query($queryInsertMemberToNewTable) or die(mysql_error());
}

######################################
### Sending function      ####
######################################

function sendMail($table, $email_message) {
##########################################
###     Selecting the new table       ####
##########################################
    $querySelectAllMembersThatHasNotAlreadyBeenSentTo = "SELECT * FROM $table WHERE `MailSent` = 0 AND `Error` = 0";

//Selects all members that havent been sendt mail to yet.

    $allMembersThatHasNotAlreadyBeenSentTo = mysql_query($querySelectAllMembersThatHasNotAlreadyBeenSentTo) or die("Problem with selecting table. <br>" . mysql_error());

    $i = 1;
    while ($row = mysql_fetch_array($allMembersThatHasNotAlreadyBeenSentTo)) {

        $to_address = $row["Mail"];
        $memberId = $row["ID"];

       $email_message->SetEncodedEmailHeader("To", $to_address, ""); 

        $error = "";
        echo $i . ": Before function. Error value: " . $error . "</br></br>";
        $error = $email_message->Send();
        echo $i . ": After function. Error value: " . $error . "</br></br>";
        echo "</br>";

        if (strcmp($error, "") > 0) {
            ##########################################################
            ###      IF ERROR UPDATE MEMBER VARIABLE "Error"      ####
            ##########################################################
            updateErrorToMember($memberId, $table, 1);
            echo date("Y-m-d H:i:s") . " : " . $i . ": MemberID: " . $memberId . ", Mail:" . $to_address . "</br>Error: $error </br></br></br>";
        } else {
            ##################################################################
            ###    IF SENDING SUCCEEDS UPDATE MEMBER VARIABLE "Sent"      ####
            ##################################################################
            updateSentToMember($memberId, $table);
            echo date("Y-m-d H:i:s") . ": " . $i . " :  Message sent to $to_address<br></br>";
        }
        $i++;
    } //while
}//function

######################################
###    End of sending function    ####
######################################
######################################
###     Run sending function      ####
######################################
sendMail($databaseTableNameContainingMembers, $email_message);

最佳答案

您不会在每次发送后清除 $email_message 对象,而是使用相同的 $email_message 对象,只是附加新地址并发送(如果这些地址之一)不正确,您将错误转给以下收件人。

您可以尝试替换以下代码:

$email_message->SetEncodedEmailHeader("To", $to_address, "");

对于这个:

$email_message->ClearAddresses();
$email_message->AddAddress($to_address, $to_address);

关于mysql - MIME 电子邮件 - While 循环 - 数据库 - 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12825542/

相关文章:

objective-c - cocoa : while(index >= 0) 继续,即使index == -1

python - 嵌套 'while' 循环 - 如何跳出一个循环,然后跳出另一个循环?

.net - 有哪些 .NET Mime 解析库可用?

php - 如何计算 PHP 表中所有带撇号的行?

php - 将 session 数组存储在数据库中

java - 请帮忙,在 while 循环中询问某些问题时遇到问题

Java邮件 : distinguish between each message in an email thread

mysql - mysql的字符编码问题

php - SQL Server 和 MySQL 之间的一种同步方式

email - 满足 HTML、电子邮件、图像和纯文本的 MIME 类型?