我无法使用phpmailer发送pdf附件
我的php邮件程序存在附件问题。所有信息(电子邮件、姓名、pdf_链接等)都是正确的,我可以收到电子邮件,但附件中没有pdf 请你检查一下我的密码,告诉我我的错误是什么,我希望你能帮助我我无法使用phpmailer发送pdf附件,php,codeigniter,email,phpmailer,Php,Codeigniter,Email,Phpmailer,我的php邮件程序存在附件问题。所有信息(电子邮件、姓名、pdf_链接等)都是正确的,我可以收到电子邮件,但附件中没有pdf 请你检查一下我的密码,告诉我我的错误是什么,我希望你能帮助我 //mailing starts $mail = new PHPMailer(); $mail->isSMTP(); $mail->Timeout = 20; $mail->SMTPDebug = 0; //Set the hostname of the mail se
//mailing starts
$mail = new PHPMailer();
$mail->isSMTP();
$mail->Timeout = 20;
$mail->SMTPDebug = 0;
//Set the hostname of the mail server
$mail->Host = 'my-host-information';
$mail->Port = 465;//587
$mail->SMTPSecure = 'ssl';//tls
$mail->SMTPAuth = true;
$mail->Username = "myemail@mywebsite.com";
$mail->Password = "****";
//Set who the message is to be sent from
$mail->setFrom('myemail@mywebsite.com', 'Name here');
$mail->addAddress($member_email, '');
$mail->AddAttachment($pdf_link, $name = $image_name, $encoding = 'base64', $type = 'application/pdf');
$message_it = 'Grazie per il tuo interesse. La tua fattura proforma è stata predisposta e la trovi in allegato. Puoi visualizzarlo sul nostro sistema .<br><br>Cordiali Saluti,<br>My Company';
$message_en = 'Thanks for your interest. Your proforma invoice has been prepared and you can find it attached. You can view it on our system. <br> <br> Best Regards, <br> My Company ';
$combined_name_it = 'Caro ' .$member_name.' '. $member_company;
$combined_email = $email;
$combined_message_it = $message_it;
$combined_name_en = 'Dear ' .$member_name.' '. $member_company;
$combined_email = $email;
$combined_message_en = $message_en;
if($email_lang == 'it'){
$mail->isHTML(true);
$mail->Subject = 'La tua proforma è pronta '; // Email subject
$mail->Body = "$combined_name_it,$combined_email<br /><br />$combine_message_it"; // Mail Content
$mail->CharSet = 'utf-8';
}else{
$mail->isHTML(true);
$mail->Subject = 'Your proforma is ready.';
$mail->Body = "$combined_name_en<br />$combined_email<br /><br />$combined_message_en";
$mail->CharSet = 'utf-8';
}
$result = $mail->send();
if($result){
$session = \Config\Services::session();
$session->setFlashdata('success', 'Proforma updated');
return redirect()->to($_SERVER['HTTP_REFERER']);
}else{
$data['validation'] = $this->validator;
$data['title'] = 'Proforma Update';
echo view('admin/assets/header', $data);
return redirect()->to($_SERVER['HTTP_REFERER']);
}
//mailing ends
//邮件开始发送
$mail=new PHPMailer();
$mail->isSMTP();
$mail->Timeout=20;
$mail->SMTPDebug=0;
//设置邮件服务器的主机名
$mail->Host='我的主机信息';
$mail->Port=465//587
$mail->SMTPSecure='ssl'//tls
$mail->SMTPAuth=true;
$mail->Username=”myemail@mywebsite.com";
$mail->Password=“****”;
//设置要从谁发送消息
$mail->setFrom('myemail@mywebsite.com“,”这里的名字“);
$mail->addAddress($member_email');
$mail->AddAttachment($pdf\u link,$name=$image\u name,$encoding='base64',$type='application/pdf');
$message_it='Grazie per il tuo interest。快板中的形式倾向和节奏。“我的公司”
科迪阿里·萨尔蒂(Cordiali Salliti)公司;
$message_en='谢谢您的关注。您的形式发票已经准备好,您可以在附件中找到。您可以在我们的系统上查看它
向您致意,
我的公司';
$combined_name_it='Caro'。$member_name'$公司成员;
$combined_email=$email;
$combined_message_it=$message_it;
$combined_name_en='Dear'.$member_name'.'$公司成员;
$combined_email=$email;
$combined_message_en=$message_en;
如果($email_lang=='it'){
$mail->isHTML(true);
$mail->Subject='La tua proformaèpronta';//电子邮件主题
$mail->Body=“$combined\u name\u it,$combined\u email
$combined\u message\u it”;//邮件内容
$mail->CharSet='utf-8';
}否则{
$mail->isHTML(true);
$mail->Subject='您的形式表已准备就绪';
$mail->Body=“$combined\u name\u en
$combined\u email
$combined\u message\u en”;
$mail->CharSet='utf-8';
}
$result=$mail->send();
如果($结果){
$session=\Config\Services::session();
$session->setFlashdata('success','Proforma updated');
返回重定向()->到($_服务器['HTTP_REFERER']);
}否则{
$data['validation']=$this->validator;
$data['title']=“形式更新”;
回显视图('admin/assets/header',$data);
返回重定向()->到($_服务器['HTTP_REFERER']);
}
//邮端
我不确定您使用的是什么语言,但这是一种奇怪的PHP:
$mail->AddAttachment($pdf_link, $name = $image_name, $encoding = 'base64', $type = 'application/pdf');
尝试将其改写为:
$mail->addAttachment($pdf_link, $image_name, 'base64', 'application/pdf');
接下来,您没有检查该调用的返回值,因此不知道该调用是否成功,请执行以下操作:
if (!$mail->addAttachment($pdf_link, $image_name, 'base64', 'application/pdf')) {
echo 'Attachment failed';
}
如果它确实失败了,你需要找出原因。通常的原因是:
- 该文件不存在
- 文件的路径不正确
- 你没有阅读权限
- 该文件的所有权错误
总的来说,您的代码中几乎没有错误检查或异常处理,因此,如果出现问题,它就会中断,您不知道原因。查看PHPMailer提供的示例,确保您使用的是最新版本。解决问题后,我可以说问题在于PHPMailer希望看到url的文件夹部分,而不是基本部分。当我加入base_url()时,其中包括http://mywebsites.com等部分,它一直在发送没有附件的电子邮件。但是,当我用文件夹部分替换它时,比如说“uploads/invoices/invoice-1.pdf”,它起作用了
谢谢@Synchro首先谢谢。我改变了我与你的行,也添加了if(!$mail->addAttachment..)部分,但似乎没有什么问题。我仍然收到电子邮件,但没有附件。该文件存在(我可以在我的文件夹中看到),路径正确(我将其粘贴到body中并获得链接),权限为644。我还与try-catch一起使用,但没有收到任何错误。如果您想要异常,您必须通过将
true
传递给构造函数来启用它们-请参考文档和示例。使用$mail->SMTPDebug=2启用调试输出代码>这样您就可以看到实际发送到服务器的内容。当我调试时,引起我注意的是:无法访问文件:my-folder-address-1-proforma.pdf(它确实存在)和2021-02-26 18:20:51 server->CLIENT:220-srv12.my-server-company.net ESMTP Exim 4.93#2 Fri,日期时间等220我们不授权使用此系统传输未经请求的220和/或批量电子邮件。220是否意味着我的主机提供商不允许我将其与附件一起发送?这意味着我的第二个建议是正确的:您的文件路径不正确;URL不是文件路径,您不应该使用外部HTTP请求来加载本地资源,因为它效率极低且容易出错。PHPMailer的addAttachment
函数故意不支持将URL用于文件位置。PHPMailer主动避免成为HTTP客户端。如文档所述,该函数需要本地文件路径,而不是URL。