ホームページ >バックエンド開発 >PHPチュートリアル >PHPMailer が中国語名の添付ファイルを送信する
再投稿する場合は、この記事が skypupil のブログからのものであることを明記してください (http://blog.csdn.net/u011956441/article/details/44161587)。他の人の努力の結果を尊重してください。ありがとうございます。 !
私のアプリケーションシナリオは次のとおりです。Web ページで、ユーザーが電子メールアドレスを入力して [メールの送信] ボタンをクリックすると、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- >AddAttachment(iconv('utf-8', 'gb2312', 'pdfs/test.pdf'), 'test.pdf');" この行。
まず 2 つのメソッドを見てみましょう:
addAttachment -- メソッド
From: PHPMailer::addAttachment()
File: class.phpmailer.php。
説明: 添付ファイルを追加します
パラメータ: パス、名前、エンコーディング、タイプのうち、パスは必須です、その他はオプションです
関数プロトタイプ: addAttachment($パス,$名前 = '', $ Encoding = 'Base64', $ Type = 'Application/Octet-Stream') {} From: PHP (>= 4.0.5)
関数プロトタイプ: string iconv ( string $in_charset 、string $
out_charset 、string $str )
説明: 文字列 str を in_charset から変換します エンコーディングを out_charset に変換します。
上記の 2 つの方法を理解すると、PHPMailer が中国語名の添付ファイルを送信できない理由は、PHPMailer が utf-8 でエンコードされた中国語のファイル パスを正しく読み取れないためであることが理解できるでしょう。ファイルパスをgb2312エンコードに変換すると、正しく送信できるようになります。 最後に、SMTPサーバーのポート番号アドレスを添付します: http://blog.wpjam.com/m/gmail-qmail-163mail-imap-smtp-pop3/
上記では、PHPMailer が中国語名の添付ファイルを送信する方法と、関連する内容を紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。