1. 程式人生 > >PHPMailer傳送中文名稱附件

PHPMailer傳送中文名稱附件

轉帖請註明本文出自skypupil的部落格(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 = '
[email protected]
'; // SMTP伺服器使用者名稱(你的郵箱賬號名) $mail->Password = 'password'; // SMTP伺服器密碼(你的郵箱登陸密碼) $mail->setFrom('[email protected]', 'yourName'); // 設定發件人地址和名稱 $mail->addReplyTo('[email protected]', '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/測試.pdf'), '測試.pdf');”這行。

先來看兩個方法:

addAttachment--方法 

出自:PHPMailer::addAttachment() 

檔案:class.phpmailer.php。 

說明:新增附件。 

引數:路徑,名稱,編碼,型別。其中,路徑為必選,其它為可選 

函式原型:addAttachment($path,$name = '',$encoding = 'base64',$type = 'application/octet-stream'){}

iconv--方法

出自:PHP (>= 4.0.5)

函式原型:string iconv ( string $in_charset , string $out_charset , string $str )

說明:將字串 str 從 in_charset 轉換編碼到 out_charset。

瞭解了上面兩個方法後,就明白了PHPMailer之所以不能傳送中文名稱的附件,是因為PHPMailer不能正確讀取utf-8編碼的中文檔案路徑,只要將檔案路徑轉換成gb2312編碼後,就能正確傳送了。

最後,附上SMTP伺服器埠號地址:http://blog.wpjam.com/m/gmail-qmail-163mail-imap-smtp-pop3/

相關推薦

PHPMailer傳送中文名稱附件

轉帖請註明本文出自skypupil的部落格(http://blog.csdn.net/u011956441/article/details/44161587),請尊重他人的辛勤勞動成果,謝謝! 我的應用場景是:在一個網頁上當使用者輸入郵箱地址並點選“傳送郵件”按鈕後,呼叫s

phpmailer傳送郵件和附件

ps:鄙視那些複製別人文章並美其名曰“原創”的狗,鄙視那些騙C幣下載垃圾資源的垃圾廢物。本人分享所有東西 download:https://github.com/PHPMailer/PHPMailer/releases 自己引用的時候要注意namespace  public f

[php]mail函式傳送郵件(正文+附件+中文)

<?php $from = "[email protected]"; $to = "[email protected], [email protected]"; $subject = "郵件主題"; $subject = "=?UTF-8

使用sendEmail成功傳送中文郵件

sendEmail -o message-charset=gbk -f [email protected] -t [email protected] -s smtp.qq.com:587 -xu [email protected] -xp password

問題:git處理中文名稱時候顯示為編碼形式(已解決)

問題描述: Untracked files: (use "git add <file>..." to include in what will be committed) static/README.md "\350\207\252\346\2

轉自: linux svn命令列無法拉取中文名稱的檔案

轉自: https://blog.csdn.net/shaohui/article/details/3996274#commentBox   svn: Can't convert string from 'UTF-8' to&

java傳送郵件帶附件、格式、可以實現轉發、祕密轉發等操作

最近在研究java傳送郵件帶附件、格式、可以實現轉發、祕密轉發等操作的元件,下面把程式碼和大家共享下,本來想做資源共享的,但是下載就會消耗大家的積分,沒積分就沒得看了,想想還是算了,直接發出來了,個人知識一點點的研究,敬請大家指點 2010-12-14  package njfc.co

spring boot 郵件傳送(帶附件

首先開啟QQ郵箱的POP.SMTP伺服器,獲取授權碼。 設定-->賬戶-->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務   pom.xml需要載入三個jar,可以在這個網站裡下載:https://mvnrepository.com/

java傳送郵件新增附件-附件名有問題解決。

新增附件時為setFileName需要指定utf-8的編碼格式,否則解析不出來會隨機給一個類似下面名稱的附件名 tcmime.1882.2250.7267.bin 正確的set方式: MimeUtility.encodeText(file.getName(), "UTF-8"

PHPMailer傳送outlook日曆郵件踩過的坑

$mail=new PHPMailer(); $startTime = "2018-12-18 16:00"; $endTime = "2018-12-18 18:00"; $inviteName = "這是一封郵件測試";

SpringBoot傳送郵件(帶附件以及不帶附件)

1.QQ郵箱 首先登入QQ郵箱>>>登入成功後找到設定>>>然後找到郵箱設定>>>點選賬戶>>>找到POP3|SMTP服務>>>點選開啟(開啟需要驗證,驗證成功後會有一串授

springboot 傳送郵件+模板+附件

package com.example.demo;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.

python 傳送郵件 附帶附件

from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart import smtplib #建立一個帶附件的例項 msg = MIMEMultipart() #構造

Java實現按中文名稱排序

//定義排序函式 public static String[] getSortOfChinese(String[] a) { // Collator 類是用來執行區分語言環境這裡使用CHINA Comparator cmp = Collator.getInstance(java.util

java 傳送郵件 帶附件或者表格

package com.sub.utils; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import java

HttpServletResponse下載檔案(中文名稱下載)-------手動編碼實現下載

DownloadServlet:   package com.yuming.servlet; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; impo

PHPMailer傳送郵件

  使用PHP發郵件,需要PHPMailer類庫,今天記錄下使用PHPMailer的一些使用方法。 使用環境   0、版本不同,可能會導致解決方案行不通,故記錄使用環境。   1、Apache/2.4.33 (Win64) PHP/5.6.35   2、Thi

jquery正則表示式驗證糾正版(手機號、身份證號、中文名稱

最新福利:領取阿里雲1000通用代金券   <script type="text/javascript"> // 驗證中文名稱 function isChinaName(name) { var pattern = /^[\u4E00-\u9FA5]{1,6}$/; retu

android 各版本對應的API(sdk) Level以及中文名稱

Android 1.0 2008年9月23日,釋出Android作業系統中的第一個正式版本:Android 1.0(Astro“鐵臂阿童木”)。全球第一臺Android裝置HTC Dream(G1)就是搭載Android 1.0作業系統,以下Android 1.0所擁有的特性功能: Android

MIDI演出控制協議之MIDI資料位元組-GM1音色標準-打擊樂器庫(帶樂器中文名稱

/* General MIDI Level 1 打擊樂器對照表 在MIDI通道10上,下列每一種樂器都能發出一種獨特的打擊樂。GM1打擊樂 只包含下列這些樂器。只要支援GM標準就一定支援這些樂器。雖然一些廠商 為其MIDI產品增加了新的