2012-03-23 55 views
7

這裏是我的代碼不能用delphi印

電子郵件的身體已經得到了一些Unicode字符

LSMTP := TIdSMTP.Create(nil); 
    try 
    LMsg := TIdMessage.Create(LSMTP); 
    try 
     with LMsg do 
     begin 
     Subject := Subj; 
     Recipients.EMailAddresses := Email;  
     WriteToLog(cInformation,'To: '+Recipients.EMailAddresses);  
     From.Address := ReplaceVariables(From_Address);  
     From.Name := ReplaceVariables(From_Name);  
     Body.Text := EmailMessage;  
     ContentTransferEncoding := '8bit';  
     CharSet := 'UTF-8';  
     ContentType := 'text/plain';  
    end; 

而這就是我得到

Content-Type: text/plain; charset=us-ascii <<<<< WRONG 
Content-Transfer-Encoding: 8bit 
Date: Fri, 23 Mar 2012 17:53:19 +0000 

使用發送UTF-8的電子郵件delphi 2009

回答

2

明白了吧

秩序的事件是非常重要的

這一個工程

LMsg.ContentType:= 'text/plain的'; LMsg.CharSet:='UTF-8';

這一個不

LMsg.CharSet:= 'UTF-8'; LMsg.ContentType:='text/plain';

13

這是設計。當設置ContentType屬性時,如果輸入未明確指定字符集,則屬性設置器可以使用默認值更新CharSet屬性。某些內容類型(特別是在text/領域中)具有各種RFC中指定的特定字符集默認值。 Indy試圖儘可能遵循這些規則。因此,你需要將CharSet屬性設置爲您預期的價值,你已經設置了ContentType屬性之後,因爲你已經發現:

//LMsg.CharSet := 'UTF-8'; 
LMsg.ContentType := 'text/plain'; 
LMsg.CharSet := 'UTF-8'; 

你也可以這樣做,而不是:

LMsg.ContentType := 'text/plain; charset=UTF-8'; 
2

在我情況下,如果我添加一個附件,我只能指定字符集:

pMsg->CharSet = "UTF-8";

否則郵件閱讀器顯示郵件的源代碼。