使用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...