Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP发送多封邮件_Php_Email - Fatal编程技术网

用PHP发送多封邮件

用PHP发送多封邮件,php,email,Php,Email,我的代码有问题,我试图同时向不同的用户发送多封邮件,但它只将邮件发送到邮件列表中的第一封邮件 有人能帮我找到问题所在吗 function send_mails($filename, $from){ $infos = combine_mails_to_passwords($filename); $headers = "MIME-Version: 1.0" . "\r\n"; $headers .= "Content-Type: text/ht

我的代码有问题,我试图同时向不同的用户发送多封邮件,但它只将邮件发送到邮件列表中的第一封邮件

有人能帮我找到问题所在吗

    function send_mails($filename, $from){
        $infos = combine_mails_to_passwords($filename);
        $headers = "MIME-Version: 1.0" . "\r\n";
        $headers .= "Content-Type: text/html; charset=UTF-8\r\n";
        $headers .= "X-Mailer: PHP". phpversion() ."\r\n" ;
        $headers .= "From: '$from'" . "\r\n";
        foreach($infos as $key => $info){
            $to = $info;
            $subject = "TEST Mail";
            $message = "<h2 style='font-size:18px;'>
            Voici vos identifiants pour passer l'évaluation</h2> 
            <div style='text-align:center;'>
            <table><tr><td><u>Login: </u></td> <td><b> ".$_SESSION['login']."</b><td></tr><br/> 
            <tr><td><u>Votre Mot de Passe: </u></td> <td><b> ".$key."</b></td></tr></table></div>";
            $from = "From: Company Name <TEST>";

            $ok = mail($to,$subject,$message,$headers);
            return $ok;
    }
}

if(isset($_POST['send-submit'])){

        if (!empty($_FILES['fileToUpload']) && $_FILES['fileToUpload']['name']!=''){
            $file_path = $_FILES['fileToUpload']['tmp_name'];
            $from = $_POST['from'];
            if($from!=""){
            if($_FILES['fileToUpload']['type'] != 'text/plain'){
                $error = "The file is not a text file!";
            }
            else if(count_mails($file_path)==0){
                $error = "The file is empty!";
            }
            else{

                if(send_mails($file_path, checkInput($from))){
                    $good = "Mails sent!";
                }
                else{
                    $error = "Connexion Problem!";
                }

            }
        }
            else{
                $error = "Please enter the email of the sender!";
            }
    }
    else{
        $error = "You did not import the emails file!";
    }
}
函数发送邮件($filename,$from){
$infos=将邮件和密码组合起来($filename);
$headers=“MIME版本:1.0”。\r\n”;
$headers.=“内容类型:text/html;字符集=UTF-8\r\n”;
$headers.=“X-Mailer:PHP”.phpversion()。”\r\n”;
$headers.=“发件人:'$From'.\r\n”;
foreach($infos作为$key=>$info){
$to=$info;
$subject=“测试邮件”;
$message=”
Voici vos身份证明人向通行证估价
登录:“.$\u会话['Login']。”
Votre Mot de Passe:“.$key.”; $from=“from:公司名称”; $ok=邮件($to、$subject、$message、$headers); 返回$ok; } } 如果(isset($_POST['send-submit'])){ 如果(!empty($\u FILES['fileToUpload'])和&$\u FILES['fileToUpload']['name']!=''){ $file\u path=$\u FILES['fileToUpload']['tmp\u name']; $from=$_POST['from']; 如果($from!=“”){ 如果($_文件['fileToUpload']['type']!='text/plain'){ $error=“该文件不是文本文件!”; } else if(计数邮件($file\u路径)==0){ $error=“文件为空!”; } 否则{ if(发送邮件($file\u路径,检查输入($from))){ $good=“已发送邮件!”; } 否则{ $error=“连接问题!”; } } } 否则{ $error=“请输入发件人的电子邮件!”; } } 否则{ $error=“您没有导入电子邮件文件!”; } }
注意:邮件是通过文本文件上传的。
谢谢大家!

for
循环中调用
return$ok
时,实际上只发送一封邮件。这可能会有所帮助,因为它会在对所有元素运行循环后返回一些内容:

function send_mails($filename, $from){
    $infos = combine_mails_to_passwords($filename);
    $headers = "MIME-Version: 1.0" . "\r\n";
    $headers .= "Content-Type: text/html; charset=UTF-8\r\n";
    $headers .= "X-Mailer: PHP". phpversion() ."\r\n" ;
    $headers .= "From: '$from'" . "\r\n";
    foreach($infos as $key => $info){
        $to = $info;
        $subject = "TEST Mail";
        $message = "<h2 style='font-size:18px;'>
        Voici vos identifiants pour passer l'évaluation</h2> 
        <div style='text-align:center;'>
        <table><tr><td><u>Login: </u></td> <td><b> ".$_SESSION['login']."</b><td></tr><br/> 
        <tr><td><u>Votre Mot de Passe: </u></td> <td><b> ".$key."</b></td></tr></table></div>";
        $from = "From: Company Name <TEST>";

        $ok = mail($to,$subject,$message,$headers);
    }
    return $ok;
}
函数发送邮件($filename,$from){
$infos=将邮件和密码组合起来($filename);
$headers=“MIME版本:1.0”。\r\n”;
$headers.=“内容类型:text/html;字符集=UTF-8\r\n”;
$headers.=“X-Mailer:PHP”.phpversion()。”\r\n”;
$headers.=“发件人:'$From'.\r\n”;
foreach($infos作为$key=>$info){
$to=$info;
$subject=“测试邮件”;
$message=”
Voici vos身份证明人向通行证估价
登录:“.$\u会话['Login']。”
Votre Mot de Passe:“.$key.”; $from=“from:公司名称”; $ok=邮件($to、$subject、$message、$headers); } 返回$ok; }

…但它将只返回上次发送邮件的状态。您应该定义当至少一封邮件被正确发送时,还是仅当所有邮件都被发送时,您希望该方法返回
true
,并根据该条件修改该变量。

如果将return放在foreach循环中,它将在第一次迭代中返回响应,因此,其他电子邮件将不会被处理

返回$ok是罪魁祸首…这意味着您的函数在第一次循环后返回,因此它的其余部分永远不会执行

相反,您可能希望建立一个所有电子邮件尝试结果的列表,以便查看哪些成功,哪些失败。然后可以在循环结束后,在函数的最后返回该列表

类似这样(未经测试):

函数发送邮件($filename,$from){
$infos=将邮件和密码组合起来($filename);
$headers=“MIME版本:1.0”。\r\n”;
$headers.=“内容类型:text/html;字符集=UTF-8\r\n”;
$headers.=“X-Mailer:PHP”.phpversion()。”\r\n”;
$headers.=“发件人:'$From'.\r\n”;
$results=array();//保存结果列表
foreach($infos作为$key=>$info){
$to=$info;
$subject=“测试邮件”;
$message=”
Voici vos身份证明人向通行证估价
登录:“.$\u会话['Login']。”
Votre Mot de Passe:“.$key.”; $from=“from:公司名称”; $results[$to]=邮件($to、$subject、$message、$headers); } 返回$results; }
以及类似这样的方法来处理结果并警告失败:

$results = send_mails($file_path, checkInput($from));
foreach($results as $email => $result)
{
  if ($result == false) echo "Alert: Email to $email failed<br/>";
}
echo "All mail sent successfully apart from any which are alerted above";
$results=send_mails($file_path,checkInput($from));
foreach($results as$email=>$result)
{
如果($result==false)回显“警报:发送给$Email的电子邮件失败
”; } echo“除上述任何警报外,所有邮件均已成功发送”;
它只将邮件发送到“我的邮件”列表中的第一封邮件。。。由于您在发送第一封电子邮件后将离开循环,因此可能不需要迭代,
to
接受以下格式的字符串
user@example.com, anotheruser@example.com
@abestrad如果查看代码,发送到每个地址的消息内容略有不同($key变量不同)。所以我认为在这种情况下,这不是一个可行的解决方案。@ADyson说得对,没有抓住那个关键。你能对你的答案做进一步的解释吗?OP应该做些什么来解决这个问题?非常感谢你的回答,它正在工作!祝您今天过得愉快
$results = send_mails($file_path, checkInput($from));
foreach($results as $email => $result)
{
  if ($result == false) echo "Alert: Email to $email failed<br/>";
}
echo "All mail sent successfully apart from any which are alerted above";