使用 PHP 在郵件中傳送附件
我們將介紹在 PHP 中通過電子郵件傳送附件的不同方法。
使用 PHPMailer 在電子郵件中傳送附件
我們可以使用 PHPMailer 類來傳送電子郵件,允許我們傳送附件。我們可以建立一個 PHPMailer 類物件並使用其方法和屬性將電子郵件傳送給所需的收件人。我們將使用 Gmail 傳送電子郵件。因此,我們將使用 SMTP 協議。該庫具有 addAttachment() 方法,可讓我們新增附件。首先,我們需要從 GitHub 下載庫。
例如,建立一個資料夾 src 並將三個檔案 PHPMailer.php、SMTP.php 和 Exception.php 複製到其中。然後建立一個檔案 index.php 並使用 require 語句來包含這三個檔案。然後使用這些檔案的相應類。接下來,建立 PHPMailer() 類的物件 $mail。使用 Username 和 Password 屬性設定發件人的電子郵件和密碼。使用 Subject 和 Body 屬性設定電子郵件的主題和正文。使用 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。然後使用 setUsername 和 setPassword 方法設定發件人的電子郵件和密碼。接下來,建立 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 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