재게시 시 이 글은 스카이푸필 블로그(http://blog.csdn.net/u011956441/article/details/44161587)에서 가져온 글임을 꼭 밝혀주세요, 다른 분들의 노고의 결실을 존중해주세요, 감사합니다!
내 적용 시나리오는 다음과 같습니다. 웹 페이지에서 사용자가 이메일 주소를 입력하고 "이메일 보내기"를 클릭하는 경우 " 버튼, sendMail.php를 호출하여 사용자에게 첨부 파일이 포함된 이메일을 보냅니다.
문제점은 첨부파일명이 영문명일 경우 전송이 가능하다는 점입니다. 하지만 첨부 파일 이름이 중국어인 경우 사용자의 메일함은 첨부 파일을 받지 못합니다. 내 솔루션은 다음과 같습니다. 먼저 sendMail.php 코드를 업로드합니다.
<?php header('Content-Type:text/html; charset=utf-8'); /*调用该php的页面通过$.ajax的POST方法传递过来的参数*/ $toEmailAddress=$_POST['toEmailAddress']; /*PHPMailer引用文件,版本号;5.2.9*/ require_once('PHPUtils/PHPMailer/class.phpmailer.php'); require_once('PHPUtils/PHPMailer/class.smtp.php'); /*新建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 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.