>  기사  >  백엔드 개발  >  PHPMailer는 중국어 이름 첨부 파일을 보냅니다.

PHPMailer는 중국어 이름 첨부 파일을 보냅니다.

WBOY
WBOY원래의
2016-08-08 09:28:321438검색

재게시 시 이 글은 스카이푸필 블로그(http://blog.csdn.net/u011956441/article/details/44161587)에서 가져온 글임을 꼭 밝혀주세요, 다른 분들의 노고의 결실을 존중해주세요, 감사합니다!

내 적용 시나리오는 다음과 같습니다. 웹 페이지에서 사용자가 이메일 주소를 입력하고 "이메일 보내기"를 클릭하는 경우 " 버튼, sendMail.php를 호출하여 사용자에게 첨부 파일이 포함된 이메일을 보냅니다.

문제점은 첨부파일명이 영문명일 경우 전송이 가능하다는 점입니다. 하지만 첨부 파일 이름이 중국어인 경우 사용자의 메일함은 첨부 파일을 받지 못합니다. 내 솔루션은 다음과 같습니다. 먼저 sendMail.php 코드를 업로드합니다.

<?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 "恭喜,邮件发送成功!";
}

?>

위 코드의 문제를 해결하는 핵심은 "$mail- >첨부 파일 추가( iconv('utf-8', 'gb2312', 'pdfs/test.pdf'), 'test.pdf');" 이 줄입니다.

먼저 두 가지 방법을 살펴보겠습니다.

addAttachment--method

보낸 사람: PHPMailer::addAttachment()

파일: class.phpmailer.php

설명: 첨부 파일을 추가합니다.

매개변수: 경로, 이름, 인코딩, 유형. 기타는 선택 사항입니다.

함수 프로토타입: addAttachment( $경로,$이름 = '',$encoding = 'base64',$type = 'application/octet-stream'){}

iconv--방법

시작: PHP(>= 4.0.5)

함수 프로토타입: 문자열 iconv( 문자열 $in_charset , 문자열 $out_charset , 문자열 $str )

설명: _문자 집합에서 문자열 str을 변환합니다. 인코딩을 out_문자셋으로 변환합니다.

위의 두 가지 방법을 이해하고 나면 왜 PHPMailer가 중국어 이름을 보낼 수 없는지 이해하게 될 것입니다. 첨부 파일의 오류는 PHPMailer가 UTF-8로 인코딩된 중국어 파일 경로를 올바르게 읽을 수 없기 때문입니다. 파일 경로를 gb2312 인코딩으로 변환하면 올바르게 보낼 수 있습니다.

마지막으로 SMTP 서버 포트 번호 주소를 첨부합니다: http://blog.wpjam.com/m/gmail -qmail-163mail-imap-smtp-pop3/
위 내용은 PHPMailer가 중국어 이름 첨부 파일을 보내는 방법과 관련 내용을 소개한 내용입니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.