2012-03-23 9 views
7

Oto mój kodNie mógł wysłać UTF-8 e-mail przy użyciu Delphi Indy

ciało Email ma kilka znaków 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; 

A to co mam

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

Używanie delphi 2009

Odpowiedz

2

Gotowy do pracy

kolejność zdarzeń jest bardzo ważna

Ten działa

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

ten nie

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

13

Zgodnie z projektem. Po ustawieniu właściwości ContentType właściwość ustawiająca może zaktualizować właściwość CharSet z wartością domyślną, jeśli dane wejściowe nie określają jawnie zestawu znaków. Niektóre typy zawartości, szczególnie w dziedzinie text/, mają określone wartości domyślne zestawu znaków określone w różnych dokumentach RFC. Indy stara się postępować zgodnie z tymi zasadami najlepiej jak potrafi. Jako takie, trzeba ustawić właściwość CharSet do zamierzonej wartości po tym, jak ustawić właściwość ContentType, jak już odkryte:

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

Można też to zrobić w zamian:

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

W moim przypadku, jeśli mogę dodać Attachement, muszę tylko określić charset:

pMsg->CharSet = "UTF-8";

przeciwnym razie na mailreader pokaż kod źródłowy wiadomości.

Powiązane problemy