使用 PHP 在郵件中傳送附件

Subodh Poudel 2023年1月30日
  1. 使用 PHPMailer 在電子郵件中傳送附件
  2. 使用 SwiftMailer 在電子郵件中傳送附件
使用 PHP 在郵件中傳送附件

我們將介紹在 PHP 中通過電子郵件傳送附件的不同方法。

使用 PHPMailer 在電子郵件中傳送附件

我們可以使用 PHPMailer 類來傳送電子郵件,允許我們傳送附件。我們可以建立一個 PHPMailer 類物件並使用其方法和屬性將電子郵件傳送給所需的收件人。我們將使用 Gmail 傳送電子郵件。因此,我們將使用 SMTP 協議。該庫具有 addAttachment() 方法,可讓我們新增附件。首先,我們需要從 GitHub 下載庫。

例如,建立一個資料夾 src 並將三個檔案 PHPMailer.phpSMTP.phpException.php 複製到其中。然後建立一個檔案 index.php 並使用 require 語句來包含這三個檔案。然後使用這些檔案的相應類。接下來,建立 PHPMailer() 類的物件 $mail。使用 UsernamePassword 屬性設定發件人的電子郵件和密碼。使用 SubjectBody 屬性設定電子郵件的主題和正文。使用 addAttachment() 函式新增附件。將附件的相對路徑作為方法的引數。在 AddAddress() 方法中寫入收件人的電子郵件。最後,呼叫 Send() 方法傳送電子郵件。接下來,呼叫 smtpClose() 關閉 SMTP 連線。

我們需要將發件人的電子郵件更改為使用 PHPMailer 中的 Gmail 傳送電子郵件。我們應該在 Gmail 中開啟不太安全的應用程式訪問選項以使用 PHPMailer。然後,執行以下指令碼將向收件人傳送電子郵件和附件。

示例程式碼:

<?php
require 'src/PHPMailer.php';
require 'src/SMTP.php';
require 'src/Exception.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

$mail = new PHPMailer();
$mail->isSMTP();
$mail->Host = "smtp.gmail.com";
$mail->SMTPAuth = "true";
$mail->SMTPSecure ="tls";
$mail->Port = "587";
$mail->Username = "sendersemail@gmail.com";
$mail->Password = "password";

$mail->SetFrom('sendersemail@gmail.com');
$mail->Subject = 'Message Subject';
$mail->Body = "This is a body text";
$mail->addAttachment('attachments/project.pdf');
$mail->AddAddress( 'receiversmail@gmail.com' );

$mail->Send();
$mail->smtpClose();
?>

使用 SwiftMailer 在電子郵件中傳送附件

我們也可以使用第三方庫 SwiftMailer 傳送帶有附件的電子郵件。該庫提供了一個 attach() 方法來在傳送電子郵件時新增附件。我們可以使用以下命令安裝庫。

composer require "swiftmailer/swiftmailer:^6.0"

我們需要在我們的指令碼中包含 autoloader.php 檔案以使用 SwiftMailer。該檔案位於下載檔案的供應商資料夾內。我們將使用 Gmail 傳送電子郵件。要使用 Gmail,我們需要使用 SMTP 協議。因此,我們需要使用 Swift_SmtpTransport 類建立傳輸以設定主機、埠號和協議。我們可以使用傳輸設定發件人的電子郵件和密碼。Swift_Mailer 類允許我們設定傳輸,而 Swift_Mailer 類允許我們設定訊息、收件人和附件。

例如,要求工作檔案中的 autoload.php 檔案為 vendor/autoload.php。建立 Swift_SmtpTransport 類的物件 $transport,並將主機設定為 smtp.gmail.com,埠號設定為 587,安全協議設定為 tls。然後使用 setUsernamesetPassword 方法設定發件人的電子郵件和密碼。接下來,建立 Swift_Mailer 類的物件 $mail 並將 $transport 物件設定為它。然後,建立 Swift_Message 類的另一個物件 $content 並將主題寫入作為引數。使用 setFrom()setTo() 方法指定發件人的電子郵件和收件人的電子郵件。在 setBody() 方法中編寫電子郵件正文。然後,使用 attach() 方法通過 Swift_Attachment 類的 fromPath() 方法指定附件路徑。最後,使用我們建立的 $mail 物件通過 send() 方法傳送電子郵件。提供 $content 物件作為 send() 方法的引數。

這就是我們如何使用 PHP 中的 SwiftMailer 庫傳送帶有附件的電子郵件。

示例程式碼:

require_once 'vendor/autoload.php';

$transport = (new Swift_SmtpTransport('smtp.gmail.com', 587, 'tls'))
->setUsername('sendersemail@gmail.com')
->setPassword('password')

$mail = new Swift_Mailer($transport);
$content = (new Swift_Message('Subject'))
->setFrom(['sendersemail@gmail.com' => 'Senders Name'])
->setTo('recieversemail@gmail.com')
->setBody('This is a text')
->attach(Swift_Attachment::fromPath('attachments/project.pdf'));

$result = $mail->send($content);
作者: Subodh Poudel
Subodh Poudel avatar Subodh Poudel avatar

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn