使用 PHP 在邮件中发送附件

Subodh Poudel 2023年1月30日 2021年11月29日
  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 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