ホームページ >バックエンド開発 >PHPチュートリアル >PHPMailer が中国語名の添付ファイルを送信する

PHPMailer が中国語名の添付ファイルを送信する

WBOY
WBOYオリジナル
2016-08-08 09:28:321470ブラウズ

再投稿する場合は、この記事が skypupil のブログからのものであることを明記してください (http://blog.csdn.net/u011956441/article/details/44161587)。他の人の努力の結果を尊重してください。ありがとうございます。 !

私のアプリケーションシナリオは次のとおりです。Web ページで、ユーザーが電子メールアドレスを入力して [メールの送信] ボタンをクリックすると、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- >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 チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。