当前位置: 首页 > 知识库问答 >
问题:

如何在PHP中发送带有pdf格式附件的电子邮件?

孟祯
2023-03-14

我目前正试图发送一封电子邮件,并附上一份pdf格式的表格作为附件。

我正在使用FPDM库填充我的pdf:https://github.com/codeshell/fpdm

这是我的代码

$textes = $this->session->flashdata('textes');
$pdf->Load($textes, true);
$pdf->Merge();

//Génération
$pdf->Output("F",$_SERVER['DOCUMENT_ROOT'] . "filledPDF.pdf");

然后我试着发送一封邮件,里面有这个填好的pdf作为附件。以下是我的邮寄方式:

public function sendMailWithAttachment($siteURL,$htmlMessage, $object, $recipientMail, $title, $files, $filesnames, $cc = null)
{

    if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui rencontrent des bogues.
    {
        $passage_ligne = "\r\n";
    }
    else
    {
        $passage_ligne = "\n";
    }

    $message_html = "
    <html>
    <head>
        <title></title>
        <meta charset=\"UTF-8\">
    </head>
    <body class=\"emb-font-stack-default\" bgcolor=\"#ffffff\">
        <center class=\"wrapper\" style=\"background-color: #f6f9fb;width: 100%;min-width: 620px;-webkit-text-size-adjust: 100%;-ms-text-size-adjust: 100%\">
          <table class=\"wrapper\" style=\"border-collapse: collapse;border-spacing: 0;background-color: #f6f9fb;width: 100%;min-width: 620px;-webkit-text-size-adjust: 100%;-ms-text-size-adjust: 100%;table-layout: fixed\">
              <tbody>
                  <tr>
                      <td style=\"padding-top: 0;padding-bottom: 0;padding-left: 0;padding-right: 0;vertical-align: top\">
                        <center>
                          <table class=\"preheader\" style=\"border-collapse: collapse;border-spacing: 0;width: 100%\">
                            <tbody>
                                <tr>
                                    <td class=\"title\" style=\"padding-top: 8px;padding-bottom: 8px;padding-left: 32px;padding-right: 32px;vertical-align: top;color: #adb3b9;font-family: sans-serif;font-size: 11px;line-height: 13px;width: 50%;text-align: left\">
                                    </td>
                                </tr>
                            </tbody>
                          </table>
                          <table class=\"header\" style=\"border-collapse: collapse;border-spacing: 0;width: 100%\">
                            <tbody>
                                <tr>
                                  <td class=\"logo\" style=\"padding-top: 16px;padding-bottom: 32px;padding-left: 0;padding-right: 0;vertical-align: top;color: #2f353e;font-family: sans-serif;font-size: 24px;line-height: 24px;letter-spacing: -0.02em\" align=\"center\">
                                      <center>
                                          <div id=\"emb-email-header\"><img style=\"border-left-width: 0;border-top-width: 0;border-bottom-width: 0;border-right-width: 0;-ms-interpolation-mode: bicubic;display: block;Margin-left: auto;Margin-right: auto;max-width: 484px\" src=\"$logo\" alt=\"Logo CFA\" width=\"323\" height=\"62\">
                                          </div>
                                      </center>
                                  </td>
                                </tr>
                            </tbody>
                          </table>
                        </center>
                      </td>
                  </tr>
              </tbody>
          </table>

              <table class=\"wrapper\" style=\"border-collapse: collapse;border-spacing: 0;background-color: #f6f9fb;width: 100%;min-width: 620px;-webkit-text-size-adjust: 100%;-ms-text-size-adjust: 100%;table-layout: fixed\">
                <tbody>
                    <tr>
                      <td style=\"padding-top: 0;padding-bottom: 0;padding-left: 0;padding-right: 0;vertical-align: top\">
                        <center>
                          <table class=\"lightest\" style=\"border-collapse: collapse;border-spacing: 0;width: 100%\">
                            <tbody>
                                <tr>
                                  <td style=\"padding-top: 0;padding-bottom: 0;padding-left: 0;padding-right: 0;vertical-align: top\" align=\"center\">
                                    <table class=\"one-col\" style=\"border-collapse: collapse;border-spacing: 0;Margin-left: auto;Margin-right: auto;width: 900px\">
                                      <tbody><tr>
                                        <td class=\"column\" style=\"padding-top: 0;padding-bottom: 0;padding-left: 0;padding-right: 0;vertical-align: top;text-align: left\">
                                          <div><div class=\"column-top\" style=\"font-size: 52px;line-height: 52px\">&nbsp;</div></div>
                                            <table class=\"contents\" style=\"border-collapse: collapse;border-spacing: 0;width: 100%\">
                                              <tbody><tr>
                                                <td class=\"padded\" style=\"padding-top: 0;padding-bottom: 0;padding-left: 90px;padding-right: 90px;vertical-align: top\">


                                <h1 style=\"Margin-top: 0;font-weight: 400;letter-spacing: -0.02em;font-family: sans-serif;font-size: 26px;line-height: 42px;Margin-bottom: 24px;color: #2e3b4e;text-align: center\">
                                **Title**
                                </h1>
                                <p style=\"Margin-top: 0;font-weight: 300;font-family: sans-serif;font-size: 16px;line-height: 26px;text-rendering: optimizeLegibility;Margin-bottom: 26px;color: #4e5561\">
                                $htmlMessage
                                <br><br> <i>**Name**</i>
                                <br><br><br>
                                <br>
                                </p>

                                                </td>
                                              </tr>
                                            </tbody></table>

                                            <table class=\"contents\" style=\"border-collapse: collapse;border-spacing: 0;width: 100%\">
                                              <tbody><tr>
                                                <td class=\"padded\" style=\"padding-top: 0;padding-bottom: 0;padding-left: 90px;padding-right: 90px;vertical-align: top\">

                                            <div class=\"btn\" style=\"Margin-bottom: 26px;text-align: center\">

                                                </td>
                                              </tr>
                                            </tbody></table>

                                          <div class=\"column-bottom\" style=\"font-size: 26px;line-height: 26px\">&nbsp;</div>
                                        </td>
                                      </tr>
                                    </tbody></table>
                                  </td>
                                </tr>
                            </tbody>
                          </table>
                        </center>
                      </td>
                    </tr>
                </tbody>
              </table>

          <table class=\"wrapper\" style=\"border-collapse: collapse;border-spacing: 0;background-color: #f6f9fb;width: 100%;min-width: 620px;-webkit-text-size-adjust: 100%;-ms-text-size-adjust: 100%;table-layout: fixed\">
            <tbody><tr>
              <td style=\"padding-top: 0;padding-bottom: 0;padding-left: 0;padding-right: 0;vertical-align: top\">
                <center>
                  <table class=\"footer\" style=\"border-collapse: collapse;border-spacing: 0;background-color: #1a232b;width: 100%\">
                    <tbody><tr>
                      <td class=\"shadow\" style=\"padding-top: 0;padding-bottom: 0;padding-left: 0;padding-right: 0;vertical-align: top;font-size: 2px;line-height: 2px;background-color: #07090b\" background=\"https://i3.createsend1.com/static/eb/master/05-slate/images/footer-shadow.gif\">&nbsp;</td>
                    </tr>
                    <tr>
                      <td class=\"inner\" style=\"padding-top: 0px;padding-bottom: 0px;padding-left: 0;padding-right: 0;vertical-align: top\" background=\"https://i4.createsend1.com/static/eb/master/05-slate/images/footer.gif\" align=\"center\">
                        <table class=\"cols\" style=\"border-collapse: collapse;border-spacing: 0;width: 600px\">
                          <tbody><tr>
                            <td class=\"left\" style=\"padding-top: 0;padding-bottom: 22px;padding-left: 0;padding-right: 5px;vertical-align: top;color: #8e959c;font-family: sans-serif;font-size: 12px;line-height: 20px;text-align: left;width: 53%\">
                              <table class=\"social\" style=\"border-collapse: collapse;border-spacing: 0\">
                                <tbody><tr>
                                  <td style=\"padding-top: 0;padding-bottom: 14px;padding-left: 0;padding-right: 0;vertical-align: top\">
                                  <td class=\"spacer\" style=\"padding-top: 0;padding-bottom: 14px;padding-left: 0;padding-right: 0;vertical-align: top;font-size: 1px;line-height: 1px;width: 7px\">&nbsp;</td>
                                  <td style=\"padding-top: 0;padding-bottom: 14px;padding-left: 0;padding-right: 0;vertical-align: top\">
                                    <td class=\"spacer\" style=\"padding-top: 0;padding-bottom: 14px;padding-left: 0;padding-right: 0;vertical-align: top;font-size: 1px;line-height: 1px;width: 7px\">&nbsp;</td>
                                  <td style=\"padding-top: 0;padding-bottom: 14px;padding-left: 0;padding-right: 0;vertical-align: top\">
                                   </tr>
                              </tbody></table>
                              <div>**Name**<br>
                                <br>
                                **adress**<br>
                                **adresse comp**
                                </div>
                            </td>
                            <td class=\"right\" style=\"padding-top: 0;padding-bottom: 22px;padding-left: 5px;padding-right: 0;vertical-align: top;color: #8e959c;font-family: sans-serif;font-size: 12px;line-height: 20px;text-align: right;width: 47%\">

                              <div class=\"spacer\" style=\"font-size: 1px;line-height: 20px\">&nbsp;</div>
                              <div>
                                <span class=\"block\">
                                  <span>
                                    <a style=\"color: #8e959c;text-decoration: none;transition: all 0.2s;\" href=\"#\">
                                      **phone**
                                    </a>

                                    <br>

                                    <a style=\"color: #8e959c;text-decoration: none;transition: all 0.2s;\" href=\"#\">
                                      **email**
                                    </a>

                                    <br>

                                    <br>

                                    <a style=\"color: #8e959c;text-decoration: none;transition: all 0.2s;\" href=\"www.website.com\">
                                      **website**
                                    </a>

                                  </span>
                                </span>

                              </div>
                            </td>
                          </tr>
                        </tbody></table>
                      </td>
                    </tr>
                  </tbody></table>
                </center>
              </td>
            </tr>
          </tbody></table>
        </center>
   </body>
    </html>
    ";
    //==========

    //=====Création de la boundary
    $boundary = "-----=".md5(rand());
    //==========

    //=====Définition du sujet.
    $sujet = '=?utf-8?B?'.base64_encode(Subject).'?=';
    //=========

    //=====Création du header de l'e-mail.

    $header = "MIME-Version: 1.0".$passage_ligne;
    $header.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
    $header.= utf8_decode("From: \"". **Name** ."\" <".**email**.">".$passage_ligne);
    $header.= "Reply-to: \"".**Name**."\" <".**email**.">".$passage_ligne;
    /*
    if($cc != null) {
        $header.= "Cc: " .$cc .$passage_ligne;
    }
    */


    //==========

    //=====Création du message.
    $message = $passage_ligne."--".$boundary.$passage_ligne;
    //=====Ajout du message au format HTML
    $message.= "Content-Type: text/html; charset=\"utf8\"".$passage_ligne;
    $message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
    $message.= $passage_ligne.$message_html.$passage_ligne;

    for($i=0; $i<count($files);$i++){
        $filesize = filesize($files[$i]);
        $handle = fopen($files[$i],"r");
        $content = fread($handle,$filesize);
        fclose($handle);
        $content = chunk_split(base64_encode($content));

        //==========Ajout des fichiers joints
        $message .= "--" . $boundary . $passage_ligne;
        $message .= "Content-Type: application/octet-stream; name=\"" . $filesnames[$i] . "\"" . $passage_ligne;
        $message .= "Content-Transfer-Encoding: base64" . $passage_ligne;
        $message .= "Content-Disposition: attachment; filename=\"".$filesnames[$i]."\"".$passage_ligne . $passage_ligne;
        $message .= $content . $passage_ligne;

    }
    //Fin du mail
    $message .= "--" . $boundary . "--";

    //=====Envoi de l'e-mail.
    return mail($mail,$sujet,$message,$header);
    //==========

这种“电子邮件发送”功能在普通PDF中运行良好,但在我的PDF中,所有文本和字段都会消失。我想知道是有办法还是不可能?

此外,我正在使用PHP 7和Code Igniter 3。

共有1个答案

郭瀚海
2023-03-14

好吧,正如@Magnus Eriksson所建议的,我试着用PHPMailer来实现我的邮件功能。这比基本的邮件功能简单得多,但这并不能解决我的问题。我发现在浏览器中打开它并不会显示字段,但当我从浏览器下载它时,它们仍然在这里。所以这解决了我的问题,谢谢大家!

 类似资料:
  • 尝试发送带有pdf附件的电子邮件,尝试使用swickmailer,但没有成功,此代码使用zip但不使用PDF:( 邮件被发送罚款,我得到的邮件:但附件是不存在的,在meial有所有的bas64编码在电子邮件像: onatatent-Type: Application/octet-stream; name="media.pdf"Content-transver-Encode: base 64 Con

  • 问题内容: 我想编辑以下代码并发送带有附件的电子邮件。附件是一个pdf文件,在Linux环境中位于/home/myuser/sample.pdf下。我应该在下面更改什么? 问题答案: 在这种情况下,您使用电子邮件包创建了一条消息- 然后发送消息。 这里有几个示例-http: //docs.python.org/library/email- examples.html 更新 由于上述原因,更新链接会

  • 我需要在我的应用程序中集成邮件服务。我的应用程序应该发送电子邮件,其中必须附上。pdf文件(详细报告)。PDF文件现在位于远程服务器上。 有人能帮我理解如何在黑莓手机上发送带有pdf附件的邮件吗?如果实施是可行的,那么我将如何实施? 以下是我从Blackberry知识库论坛获得的用Blackberry发送邮件的链接 如何-创建附件 如何创建和发送消息

  • 问题内容: 我似乎找不到我编写的应该发送带有附件的电子邮件的php函数的问题。我已经为此苦苦挣扎了一段时间了。 编辑 问题是邮件的消息与文件混合在一起并作为附件发送。 问题答案: Artefacto让我更加关注输出,并且找到了解决方法:

  • 问题内容: 我找到了这个库,并设法以空电子邮件发送附件,但没有将文本和附件组合在一起。 https://github.com/sloonz/go-mime-message 如何做呢? 问题答案: 我最终自己实现了它:https : //github.com/scorredoira/email 用法很简单:

  • 问题内容: 我正在尝试在带有附件的codeigniter上发送电子邮件。 我总是成功收到电子邮件。但是,我从未收到带有附件的文件。以下是代码,非常感谢所有评论。 问题答案: $ this- >电子邮件-> attach() 使您可以发送附件。将文件路径/名称放在第一个参数中。注意:使用文件路径,而不是URL。对于多个附件,请多次使用该功能。例如: