php - 如何使用 Pear Mail 实现带有附件的经过身份验证的 SMTP 电子邮件
问题描述
使用我当前的代码实现带有附件的 PHP pear Mail。奇怪的是,那里有许多似乎不起作用的来源。
现在我的邮件表单可以使用 php pear mail SMTP 发送邮件。但它没有发送附件或mime的能力。
我尝试添加 Mail_mime 类require('Mail/mime.php');
让我的附件字段name = picture
所以我的文件处理程序$file = 'cat.jpg';
我需要将此文件上传到我的服务器吗?或者是否可以直接发送到电子邮件?我不知道
我应该修改什么来尝试使用 Pear Mail 发送带有附件的经过身份验证的 SMTP 电子邮件。
<?php
// Pear Mail Library
require_once "Mail.php";
require_once "Mail/mime.php";
//getting form data
$errorMSG = "";
if (empty($_POST["name"])) {$errorMSG = "Name is required ";} else { $name = $_POST["name"];}
if (empty($_POST["email"])) {$errorMSG .= "Email is required ";} else {$email = $_POST["email"];}
if (empty($_POST["subject"])) {$errorMSG .= "Subject is required ";} else {$subject = $_POST["subject"];}
if (empty($_POST["message"])) {$errorMSG .= "Message is required ";} else {$message = $_POST["message"];}
//Message prepair
$Subject =$subject;
$sender_name =$name;
$sender_email =$email;
$body .="Customer Name: ".$sender_name."\r\n <br>";
$body .="Customer Email: ".$sender_email."\r\n <br>";
$body .=$message;
//Mime type adding
$text = $body;
$html = '<html><body>'.$body.'</body></html>';
$attachment = $Attachment;
$crlf = "\n";
$mime = new Mail_mime($crlf));
$mime -> setTXTBody($text);
$mime -> setHTMLBody($html);
$allowTypes = array('pdf', 'jpg', 'png', 'jpeg');
$file_type = $_FILES['attachment']['type']
if(in_array($file_type, $allowTypes)){
foreach($_FILES['attachment']['tmp_name'] as $key => $value){
$file_name = $_FILES['attachment']['name'][$key]; //nama file (tanpa path)
$tmp_name = $_FILES['attachment']['tmp_name'][$key]; //nama local temp file di server
$file_type = $_FILES['attachment']['type'][$key]; //tipe filenya (langsung detect MIMEnya)
$fp = fopen($tmp_name, 'r');
$content = fread($fp, filesize($tmp_name));
$content = addslashes($content);
fclose($fp);
$data = chunk_split(base64_encode($content));
$mime->addAttachment($data, $file_type);
}
}
$body = $mime -> get();
// Identify the sender, recipient, mail subject, and body
$sender = $sender_name."<no-reply@example.com>";
$recipient = "info@example.com";
$Cc = "cc@example.com";
$subject = $Subject ;
// Identify the mail server, username, password, and port
$server = "ssl://smtp.example.com";
$username = "no-reply@example.com";
$password = "**********";
$port = "465";
// Set up the mail headers
$headersssss = array(
"MIME-Version" => '1.0',
"Content-Type" => 'text/html; charset="UTF-8',
"Content-Transfer-Encoding" => 'base64\r\n',
"From" => $sender,
"To" => $recipient,
"Reply-To" => $sender_email,
"Cc" => $Cc,
"Subject" => $subject
);
$headers = $mime -> headers($headersssss);
// Configure the mailer mechanism
$smtp = Mail::factory("smtp",
array(
"host" => $server,
"username" => $username,
"password" => $password,
"auth" => true,
"port" => 465
)
);
// Send the message
$mail = $smtp->send($recipient, $headers, $body);
if (PEAR::isError($mail)) {
echo ($mail->getMessage());
}else{
echo "success";
}
我在这里找到了一个例子有人可以帮助我吗?
解决方案
推荐阅读
- git - use docker-compose to generate an image --only--
- python - Regarding dictionary value manipulation in python
- python - 适合模拟python
- d3.js - D3.csv 未返回获取 Promise Pending 的数据
- cmake - 从已编译的库中创建包配置文件?
- react-native-android - 当我使用 react-native-vector-icons 时图标不出现
- java - 为什么 Hibernate @OneToOne 执行多个选择查询而不是一个?
- email - 我无法配置电子邮件 Jenkins 扩展
- c# - 如何在没有 Excel 或 3rd 方工具的情况下将 xlsx 文件读入 .net?
- apache-pulsar - 用于检查主题分区的命令行工具-> Pulsar 中的 bookie 分类帐映射?