Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/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
我无法使用phpmailer发送pdf附件_Php_Codeigniter_Email_Phpmailer - Fatal编程技术网

我无法使用phpmailer发送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

我的php邮件程序存在附件问题。所有信息(电子邮件、姓名、pdf_链接等)都是正确的,我可以收到电子邮件,但附件中没有pdf

请你检查一下我的密码,告诉我我的错误是什么,我希望你能帮助我

//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。