通过while循环获取电子邮件地址并发送PHP电子邮件

3

我正在尝试向我的网站上所有属于5组的用户发送消息。然而,由于我的电子邮件表单结构方式,当我使用if语句时,我会得到回复说电子邮件地址没有填写。

我尝试通过while循环来添加电子邮件地址,如下所示...

while ($stmt->fetch()) {
            $to = $user_email;
}

我通过AJAX通过表单发送主题和消息。 我没有收到任何错误提示。这是我从页面返回的部分。

 else {
    echo "Email Address was not filled out.";
}

我做错了什么,导致提示未填写电子邮件地址?如果我有多个用户的电子邮件地址,我现在的方式是否可行,还是需要改变$to的结构?

以下是完整代码:

$subject = $_POST['subject'];
$message = $_POST['message'];


try {
    $con = mysqli_connect("localhost", "", "", ""); 
    if (mysqli_connect_errno()) { 
        printf("Connect failed: %s\n", mysqli_connect_error()); 
        exit(); 
    }
    $stmt = $con->prepare("SELECT id, email, username FROM users WHERE `group` IN (5)");
    if ( !$stmt || $con->error ) {
         // Check Errors for prepare
            die('User/Player SELECT prepare() failed: ' . htmlspecialchars($con->error));
        }
    if(!$stmt->execute()) {
            die('User/Player SELECT execute() failed: ' . htmlspecialchars($stmt->error));
    }
     $stmt->store_result();
} catch (Exception $e ) {
    die("User/Player SELECT execute() failed: " . $e->getMessage());
}
    $stmt->bind_result($userid, $user_email, $username);
while ($stmt->fetch()) {
            $to = $user_email;
}           
            $subject = 'Updated Status';
            $message = '';

            $from = "surveys@example.com";
            $Bcc = "surveys_check@example.com";

            // To send HTML mail, the Content-type header must be set
            $headers  = 'MIME-Version: 1.0' . "\r\n";
            $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

            // Additional headers
            //$headers .= 'To: ' .$to;//. "\r\n";
            $headers .= 'From: ' .$from. "\r\n";
            $headers .= 'Bcc: '.$Bcc. "\r\n"; 

            // Send the email
            //mail($to,$subject,$message,$headers);
            //if(mail($to,$subject,$message,$headers)){
              //   echo "Success";
            //} else { 
              //   print_r(error_get_last());
               //  echo "Fail";
            //}


            if (!empty($email)) { 
    if (filter_var($email, FILTER_VALIDATE_EMAIL)) { 

        //Should also do a check on the mail function
        if (mail($to, $subject, $message, $headers)) {
            echo "Your email was sent!"; // success message
        } else {
            echo "Mail could not be sent!"; // failed message
        }

    } else { 
        //Invalid email
        echo "Invalid Email, please provide a valid email address.";
    }

} else {
    echo "Email Address was not filled out.";
}

从我的 bind_result $stmt->bind_result($userid, $user_email, $username); - Becky
是的,你说得对。我的错。while ($stmt->fetch()) { $to = $user_email; } 我认为这只会覆盖 $to 的值。也许你需要在 while 循环中包装整个邮件发送逻辑。 - Maximus2012
1
似乎没有定义$email - mattslone
1
@mattslone 那个有效了!谢谢。 - Becky
1
你应该只需要添加逗号,$to .= $user_email . ',' - mattslone
显示剩余3条评论
1个回答

2

看起来$email没有被定义。你可以在以下代码中检查$to而不是$email

if (!empty($email)) { 
    ...
}

所以:

if (!empty($to)) { 
    ...
}

对于多个收件人,请使用以下方法:

$to .= $user_email . ',';

在你的 while 循环之前定义 $to = '';

太好了!我已经加上了这一行:if (!empty($user_email)) {。但是我应该用$to代替吗?这样做有什么区别吗? - Becky
没问题,你应该没事的 :) 如果有帮助,请接受我的答案,谢谢。 - mattslone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接