Home  >  Article  >  Backend Development  >  PHPMailer sends Chinese name attachments

PHPMailer sends Chinese name attachments

WBOY
WBOYOriginal
2016-08-08 09:28:321438browse

When reposting, please indicate that this article comes from skypupil’s blog (http://blog.csdn.net/u011956441/article/details/44161587). Please respect the results of other people’s hard work, thank you!

My application scenario is: on a web page, when the user enters their email address and clicks the "Send Mail" button, call sendMail.php to send the user an email with attachments.

The problem encountered is: when the name of the attachment is in English, it can be sent correctly, but when the name of the attachment is in Chinese, the user's mailbox cannot receive the attachment. Here is my solution: First go to the sendMail.php code:

<?php

header(&#39;Content-Type:text/html; charset=utf-8&#39;);

/*调用该php的页面通过$.ajax的POST方法传递过来的参数*/
$toEmailAddress=$_POST[&#39;toEmailAddress&#39;];
/*PHPMailer引用文件,版本号;5.2.9*/
require_once(&#39;PHPUtils/PHPMailer/class.phpmailer.php&#39;);
require_once(&#39;PHPUtils/PHPMailer/class.smtp.php&#39;);
/*新建PHPMailer实例*/
$mail = new PHPMailer();
//$mail->SMTPDebug = 4; // 设置调试信息显示级别
$mail->CharSet = 'UTF-8'; //设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置为 UTF-8
$mail->isSMTP(); // 设定使用SMTP服务
$mail->SMTPAuth = true; // 启用 SMTP 验证功能
$mail->SMTPSecure = 'ssl'; // SMTP 安全协议
$mail->Host = 'smtp.gmail.com'; // SMTP 服务器
$mail->Port = 465; // SMTP服务器的端口号
$mail->Username = 'yours@gmail.com'; // SMTP服务器用户名(你的邮箱账号名)
$mail->Password = 'password'; // SMTP服务器密码(你的邮箱登陆密码)
$mail->setFrom('yours@gmail.com', 'yourName'); // 设置发件人地址和名称
$mail->addReplyTo('yours@gmail.com', 'yourName'); // 设置邮件回复人地址和名称
$mail->Subject = '标题'; // 设置邮件标题
$mail->AltBody = '为了查看该邮件,请切换到支持 HTML 的邮件客户端'; // 可选项,向下兼容考虑
$mail->msgHTML('你好,这是来自gmail的邮件'); // 设置邮件内容
$mail->addAddress($toEmailAddress); // 收件人地址
//$mail->addAttachment('pdfs/测试.pdf'); // 添加附件 文件路径,发送附件失败
$mail->addAttachment(iconv('utf-8', 'gb2312', 'pdfs/测试.pdf'), '测试.pdf'); // 添加附件 参数1为文件路径,参数2为文件名(邮件附件的名称,可以与实际发送的本地文件名不同)
if (!$mail->send()) {
    echo "发送失败:" . $mail->ErrorInfo;
} else {
    echo "恭喜,邮件发送成功!";
}

?>

The key to solving the problem in the above code is to use "$mail- >AddAttachment(iconv('utf-8', 'gb2312', 'pdfs/test.pdf'), 'test.pdf');" this line.

Let’s look at two methods first:

addAttachment--Method

From: PHPMailer::addAttachment()

File: class.phpmailer.php.

Description: Add attachment.

Parameters: path, name, encoding, type. Among them, path is required, others are optional

Function prototype: addAttachment($path,$name = '', $ Encoding = 'Base64', $ Type = 'Application/Octet-Stream') {} From: PHP (>= 4.0.5)

Function prototype: string iconv ( string $in_charset , string

$

out_charset , string $str )

Description: Convert string str from in_charset Convert encoding to out_charset.

After understanding the above two methods, you will understand that the reason why PHPMailer cannot send attachments with Chinese names is because PHPMailer cannot correctly read the utf-8 encoded Chinese file path. As long as you change After the file path is converted into gb2312 encoding, it can be sent correctly. Finally, attach the SMTP server port number address: http://blog.wpjam.com/m/gmail-qmail-163mail-imap-smtp-pop3/

The above introduces how PHPMailer sends Chinese name attachments, including the relevant content. I hope it will be helpful to friends who are interested in PHP tutorials.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn