使用Indy控制項發郵件時遇到的問題

2021-04-29 15:22:21 字數 3226 閱讀 1981

使用tidmessage和tidsmtp來發生郵件;郵件正文使用html,發163和qq郵箱正常,而發126和188等會顯示html原始碼。多方查資料後,在微軟的http://office.microsoft.com/zh-cn/outlook/hp012329962052.aspx中突然得到靈感,可能是郵件格式的原因。一試contenttype果然如此。如果沒有設contenttype,

則有些郵箱會將郵件當作純文本來顯示,這就是引起上述問題的原因。

主要**如下:

1、設定郵件內容;

varmailmessage:tidmessage;  //包含郵件內容的元件

mailmessage:=tidmessage.create(nil);

//沒有

contenttype,則如果是非文字格式郵件,對方有可能收到的是亂碼或html原始碼;

mailmessage.contenttype:='text/html';  //這一句非常重要,它是標識這封郵件是哪種格式。

mailmessage.charset:='gbk';

mailmessage.subject:='郵件主題';

mailmessage.body.add('郵件正文內容');

.....................................

{以下**僅作為參考,因每個程式每人要求都不同;

if trim(edsubject.text)<>'' then mailmessage.subject:=edsubject.text;

//處理body

if trim(edbody.text)<>'' then

begin

mailmessage.body.clear;

mailmessage.body.add(edbody.html);

//   mailmessage.body.add( stringreplace(edbody.html,'body','div',[rfreplaceall, rfignorecase]));

end;

//處理toaddress

for j:=0 to threadmailqty-1 do

begin

if lvto.items.count=0 then break;

if lvto.items.count<=(i*threadqty+j) then break;

if j=0 then

mailmessage.recipients.emailaddresses:=lvto.items.item[i*threadqty+j].caption

else

mailmessage.recipients.emailaddresses:=mailmessage.recipients.emailaddresses+','+lvto.items.item[i*threadqty+j].caption;

end;

//處理ccaddress

for j:=0 to threadmailqty-1 do

begin

if lvcc.items.count=0 then break;

if lvcc.items.count<=i*threadqty then break;

if j=0 then

mailmessage.cclist.emailaddresses:=lvcc.items.item[i*threadqty+j].caption

else

mailmessage.cclist.emailaddresses:=mailmessage.cclist.emailaddresses+','+lvcc.items.item[i*threadqty+j].caption;

end;

//處理bccaddress

for j:=0 to threadmailqty-1 do

begin

if lvbcc.items.count=0 then break;

if lvbcc.items.count<=i*threadqty then break;

if j=0 then

mailmessage.bcclist.emailaddresses:=lvbcc.items.item[i*threadqty+j].caption

else

mailmessage.bcclist.emailaddresses:=mailmessage.bcclist.emailaddresses+','+lvbcc.items.item[i*threadqty+j].caption;

end;

//處理attachmentsofstringsarrary

if lvattachment.items.count>0 then

begin

for j:=0 to lvattachment.items.count-1 do

if fileexists(lvattachment.items.item[j].subitems.strings[0]) then

tidattachment.create(mailmessage.messageparts,lvattachment.items.item[j].subitems.strings[0]);

end;

2、設定傳送元件內容

varmailsmtp:tidsmtp;   //傳送郵件的元件

trymailsmtp:=tidsmtp.create(self);

mailsmtp.host:='smtp.host.com之類';

mailsmtp.port:=25;

mailsmtp.username:='mail loginuser';//mail loginuser

mailsmtp.password:='loginpassword';

mailsmtp.authenticationtype:=atlogin ; //驗證方式

mailsmtp.connect(-1); //登入伺服器

mailsmtp.authenticate;//驗證使用者名稱和密碼;

mailsmtp.send(mailmessage); //傳送郵件

finally

if assigned(mailsmtp) then  //清理工作;

begin

if mailsmtp.connected then mailsmtp.disconnect;

freeandnil(mailsmtp);

end;

end;

Outlook發郵件時忘記寫主題的解決方法

用慣了foxmail新增主題提示,在outlook下兩次發郵件忘記寫主題了,實在不應該!分享乙個解決方案。outlook發郵件時忘記寫主題的解決方法 按alt f11進入vba整合開發環境,在左上角的工程資源管理器中依次展開project1 microsoft office outlook 物件 t...

使用indy傳送電子郵件的注意點

用indy9.0.18元件傳送電子郵件很簡單,一般這樣就可以 1 對 qq.com,需要登入http mail.qq.com,在你的郵箱設定中去開通 允許pop3 smtp收發郵件 2 asmtpusername你要注意郵件服務商如何規定的,對 qq.com,只需要且只能輸入前面的 就可以了,而對於...

使用ToluaFrameWork時遇到的一些問題

最近的專案在使用tolua框架熱更新。在做初期準備時,拿著github上的toluaframework進行學習和修改,在匯出安卓包時,遇到了一些問題,因此記錄了一下。1.plugins目錄下的x86和x86 64資料夾中的tolua要設定成不同的平台,android libs的armeabi v7a...