用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";