Bitte geben Sie beim erneuten Posten an, dass dieser Artikel aus dem Blog von skypupil stammt (http://blog.csdn.net/u011956441/article/details/44161587), Bitte respektieren Sie die Früchte der harten Arbeit anderer Menschen, danke!
Mein Anwendungsszenario ist: auf einer Webseite, wenn der Benutzer seine E-Mail-Adresse eingibt und auf „E-Mail senden“ klickt "-Schaltfläche: Rufen Sie sendMail.php auf, um E-Mails mit Anhängen an Benutzer zu senden.
Das aufgetretene Problem ist: Wenn der Name des Anhangs ein englischer Name ist, kann er gesendet werden korrekt, aber wenn der Anhangsname auf Chinesisch ist, empfängt das Postfach des Benutzers den Anhang nicht. Hier ist meine Lösung: Laden Sie zunächst den sendMail.php-Code hoch:
<?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 "恭喜,邮件发送成功!"; } ?>
Der Schlüssel zur Lösung des Problems im obigen Code ist die Verwendung von „$mail- >AddAttachment( iconv('utf-8', 'gb2312', 'pdfs/test.pdf'), 'test.pdf');" diese Zeile.
Schauen wir uns zunächst zwei Methoden an:
addAttachment--method
Von: PHPMailer::addAttachment()
Datei: class.phpmailer.php
Beschreibung: Anhang hinzufügen.
Erforderlich, andere sind optional
Funktionsprototyp: addAttachment( $Pfad,$Name = '',$encoding = 'base64',$type = 'application/octet-stream'){}
iconv--method
Von: PHP (>= 4.0.5)
Funktionsprototyp: string iconv ( string $in_charset , string $out_charset , string $str )
Erklärung: Konvertieren Sie die Zeichenfolge str aus dem Zeichensatz in_ Konvertieren Sie die Codierung in den Zeichensatz out_.
Nachdem Sie die beiden oben genannten Methoden verstanden haben, werden Sie verstehen, warum PHPMailer keine chinesischen Namen senden kann Der Grund für den Anhang liegt darin, dass PHPMailer den UTF-8-codierten chinesischen Dateipfad nicht korrekt lesen kann. Solange der Dateipfad in die GB2312-Codierung konvertiert wird, kann er korrekt gesendet werden.
Fügen Sie abschließend die Adresse der SMTP-Server-Portnummer hinzu: http://blog.wpjam.com/m/gmail -qmail-163mail-imap-smtp-pop3/