Login  

Blog Stats

News


Visual Developer - Visual Basic MVP

隨筆分類

文章分類

每月文章

優質好站連結


強力鎯頭 の VB 部落

您好 ! 歡迎蒞臨 Power Hammer 的 VB 部落 ! 網誌內容主要為 VB .Net C# WMI 等相關資訊 , 提供網友參考

如何使用 CDO 物件來寄 E-Mail

 

CDO ( Collaboration Data Objects ) 物件 對應檔案 CDOSYS.dll E-Mail 寄送使用;

可應用於 VB ASP .Net 是簡單的信件寄送方式之一

 

    Dim objCDO As Object

    Dim strCfg As String

 

    Set objCDO = CreateObject("CDO.Message")

    strCfg = "http://schemas.microsoft.com/cdo/configuration/"

 

    With objCDO

       

        .Sender = "別胡亂送@OhMyGod.com"

        .From = "誰是寄件者@NoOneKnows.com"

        .To = "要寄給誰@whois.com.tw"

 

        .Fields("urn:schemas:mailheader:X-Priority") = 1 ' Priority = PriorityUrgent 高優先順序

        .Fields("urn:schemas:mailheader:return-receipt-to") = "誰是寄件者@NoOneKnows.com" ' 要求讀取回條

         ' .Fields("urn:schemas:httpmail:importance") = 2 ' Importance = High

       ' .Fields("urn:schemas:httpmail:priority") = 1 ' Priority = PriorityUrgent

        .Fields.Update ' 更新欄位

       

        .Subject = "沒有主旨(放主題啦)"

       

        .TextBody = "ORZ" ' Text 文字格式信件內容

        ' HTML 網頁格式信件內容

        .HTMLBody = "<HTML>" & _

                                "<BODY>" & _

                                "<table border=""1"" width=""100%"">" & _

                                "<tr><td>I</td><td>am</td><td>Hammer</td><td>!</td></tr>" & _

                                "<tr><td>Who</td><td>r</td><td>u</td><td>?</td></tr>" & _

                                "</table>" & _

                                "</BODY>" & _

                                "</HTML>"

                               

        .AddAttachment "C:\AttFile.zip" ' 附加檔案

       

        .CC = "Xman@yahoo.com.tw"   ' 副本

        .BCC = "SpiderMan@hotmail.com.tw" ' 密件副本

       

        .Configuration(strCfg & "sendusing") = 2 ' Sendusing = SendUsingPort

        .Configuration(strCfg & "smtpserver") = "msa.hinet.net" ' SMTP Server

       ' .Configuration(strCfg & "smtpserverport") = 25 ' SMTP Server Port ( 預設即為 25 )

 

        ' SMTP Server 如需登錄 , 則需設定 UserName / Password

        ' .Configuration(strCfg & "sendusername") = "UserName" ' Send User Name

        ' .Configuration(strCfg & "sendpassword") = "Password" ' Send Password

       

        .Configuration.Fields.Update ' 更新 (欄位) 組態

       

       ' .DSNOptions = 4 ' 回傳信件傳送狀態

       '  cdoDSNDefault = 0 , DSN commands are issued.

       '  cdoDSNDelay = 8 , Return a DSN if delivery is delayed.

       '  cdoDSNFailure = 2 , Return a DSN if delivery fails.

       '  cdoDSNNever = 1 , No DSNs are issued.

       '  cdoDSNSuccess = 4 , Return a DSN if delivery succeeds.

       '  cdoDSNSuccessFailOrDelay = 14 ,Return a DSN if delivery succeeds, fails, or is delayed.

 

        .Send ' 傳送

       

    End With

   

    Set objCDO = Nothing

posted on Sunday, June 18, 2006 1:05 AM

What People Are Saying About This Post...

# re: 如何使用 CDO 物件來寄 E-Mail---緊急問題,請協助,感謝 8/4/2006 4:44 PM Ann
請問HTMLBody 內容或大小有無限制?本人一直嘗試透過CDO發一個表格,但是總會少了幾列?無法完整呈現在email內,找不出原因,麻煩指導一下

# re: 如何使用 CDO 物件來寄 E-Mail 8/6/2006 10:42 PM Hammer
內容大小喔...
個人是沒仔細去查過..
不過到覺得要 Over 應該不容易

請問您的資料內容很多嗎 ?

還是您可以把 Code 貼上..

# re: 如何使用 CDO 物件來寄 E-Mail 8/7/2006 12:36 PM Ann
原始碼如下,感謝指導哪裡錯誤.

Set mail=Server.CreateObject("CDO.Message")
if mail is nothing then
reponse.write "無法傳送電子郵件:無法建立傳送郵件元件"
else
mail.To="???@??????.com.tw"
mail.Subject="申請通知"
mail.From=Session("supv_emla")
cBody="<html> <head><title></title></head><body bgcolor=""#FFFFFF"" text=""#000000"">"
email=left(123456789,8) & "xxxx"
cBody=cBody & "申請<br><font color=""red"">(編號 : " & email & ")</font><br>已通知"
cbody10= "<br>注意事項<font color=""red"">,請務必負責向隊員說明</font><br><table width=""80%"" border=""1"" cellpadding=""0"" cellspacing=""0""> <tr><td width=""11%"">一、</td> <td width=""89%""><p>111111end</p> </td></tr> <tr><td bgcolor=""#e9eef3"">"
cbody11= "二、</td><td>22222222222222222222222222222222222222end</td> </tr> <tr><td>三、</td> <td>333333333333333333end"
cbody12= "</td></tr><tr><td bgcolor=""#e9eef3"">四、</td><td>4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444end</td> </tr><tr><td>"
cbody13= "五、</td><td>55555end</td></tr><tr><td bgcolor=""#e9eef3"">"
cbody14= "六、</td><td>666666666666666666666666666666666666666end</td></tr> <tr> <td>七、</td> <td>7777777777end</td></tr><tr><td bgcolor=""#e9eef3"">"
cbody15= "八、</td><td>88888end</td></tr><tr><td>九、</td><td>99999999999end</td> </tr> <tr><td bgcolor=""#e9eef3"">十、</td><td>0</td></tr></table>"
cBody0="查詢您的。" & "<br>"
cBody0=cBody0 & "您的" & "<br>"
cBody1=cBody0 & "歡迎查詢" & "<br>"
cBody1=cBody1 & Session("url") & "</body></html>"
mail.HtmlBody=cbody & cbody10 & cbody11 & cbody12 & cbody13 & cbody14 & cbody15 & cBody1
mail.Send
if err.number<>0 then
response.write "無法傳送電子郵件:" & err.description
end if
set mail=nothing
end if


# re: 如何使用 CDO 物件來寄 E-Mail 8/9/2006 1:05 PM Hammer
您好 , HtmlBody 看來應該還好.. 還不至於 Over 才對

response.Write cbody & cbody10 & cbody11 & cbody12 & cbody13 & cbody14 & cbody15 & cBody1
' mail.Send

看看兜出來的資料對不對

也可把那段存成 .htm 在用 IE 跑..
看是不是組成的字串就有問題


# re: 如何使用 CDO 物件來寄 E-Mail 8/10/2006 11:00 AM Ann
您好
您所說的方法我已經檢測過,網頁SHOW的東西完全正確,但是收信的內容就是去掉後面一大半,我把email中的錯誤資料提供給您參考,email內文最後面就只有這些字元,您可以幫我試試看嗎?email內文塞多一些文字,或者是我本身系統的問題也說不定。

------=_NextPart_000_0007_01C6BC6A.380D0350--

Ann


#  如何使用 CDO 物件來寄 E-Mail 9/20/2006 11:12 PM 小政
我有一個問題要如何使用cdo來寄e_mail, 我是在我家的個人電腦上做測試,然後email是用奇摩的帳號自已寄給自已,不知這樣的方式是否正確,我試過了不行,還是說我家的個人電腦必須要有一個郵寄軟體,然後用這個郵寄軟體的帳號寄給奇摩的帳號,這樣的方式才行
我的cdo程式碼如下
<%
Dim nsConfig,sendusingField,smtpserverField
Dim msgConfig,msgTitle,msgBody
Set ObjMail = Server.CreateObject("CDO.Message")

nsConfig = "http://schemas.microsoft.com/cdo/configuration/"
sendusingField=nsConfig & "sendusing"
smtpserverField = nsConfig & "smtpserver"
''設定組態物件
Set msgConfig = Server.CreateObject("CDO.Configuration")
msgConfig.Fields.Item(sendusingField) = 2
msgConfig.Fields.Item(smtpserverField) = "localhost"
msgConfig.fields.update
''設定Message物件
Set ObjMail.Configuration = msgConfig
ObjMail.From = Request.Form("txtFrom")
ObjMail.To = Request.Form("txtTo")
''設定郵件主題
msgTitle = Request.Form("txtSubject")
msgbody =Request.Form("txtBody")
ObjMail.Subject = msgTitle
ObjMail.TextBody = msgbody
''傳送郵件
ObjMail.Send
%>


# re: 如何使用 CDO 物件來寄 E-Mail 10/10/2006 10:21 PM Power Hammer
不好意思..較晚回覆

感覺上..應該是 SMTPServer 的問題

底下這一段
msgConfig.Fields.Item(smtpserverField) = "localhost"

localhost 可能要設成 ISP 業者所提供的 SMTP Server
如 Hinet 為 "msa.hinet.net"


# re: 如何使用 CDO 物件來寄 E-Mail 10/19/2006 1:43 PM Vincent
請教一下,如何讓留言板按下傳送後自動寄E-Mail進行通知?

我的留言板也是按照書本所寫製作的 = =

主管是希望當有人新增留言時,能順便自動傳送E-Mail到公司某個固定的郵件信箱裡

目前公司網站是放在seednet代管的...用ASP探針檢查的結果如下 (支援CDO.Message)

http://www.linkupon.com/aspcheck.asp

留言板主要有幾個檔案
readi.asp 留言板讀取頁面
I.html、I.asp 留言板新增頁面
gbook.mdb 資料庫

再下知道應該要在 I.asp 動手腳,但不知道該下在哪一段,也不知道要下哪些原始碼 @@

以下是I.asp的原始碼...所以想請教一下 ^^

<!--#include file="d.fun"-->

<%
NAME=request("name")
email=request("email")

memo=request("memo")


If name="" Or email="" or Memo= "" Then
showmessage " 欄位留白不能接受"
response.end
End If
If instr(email ,"@") = 0 Or right(email,1)="@" Then
showmessage "請輸入正確的E-mail Address,謝謝!"
response.end
End If
Set rs = getmdbrecordset("db/gbook.mdb","guestbook")
rs.addnew
rs("姓名")=name
rs("email")=email
rs("留言")=memo

rs.update



response.redirect "readi.asp"

%>

<%
Sub showmessage(msg)
%><style Type="text/css">
<!--
body {
background-image: url('image/b1.jpg');
}
-->
</style>

<center>
<h2> </h2>
</center>
<table width="717" height="245" border="1">
<tr>
<th valign="middle" scope="row"><%=msg%> </th>
</tr>
<tr>
<th valign="middle" scope="row"><hr></th>
</tr>
<tr>
<th valign="middle" scope="row"><form>
<input name="button" Type=button onclick="history.back();" value="返回上一頁">
</form></th>
</tr>
<tr>
<th valign="middle" scope="row"><%
End sub
%> </th>
</tr>
</table>

# re: 如何使用 CDO 物件來寄 E-Mail 12/10/2006 2:54 PM 窃听器
good~

# re: 如何使用 CDO 物件來寄 E-Mail 12/14/2006 12:25 PM 硬盘数据恢复
不错~

# re: 如何使用 CDO 物件來寄 E-Mail 4/24/2007 3:19 PM PP
成功了


感謝您的分享


# re: 如何使用 CDO 物件來寄 E-Mail 5/8/2007 10:42 PM Robert
請教一下 attached file 為多個附加檔案如何處理

# re: 如何使用 CDO 物件來寄 E-Mail 5/15/2007 10:41 AM PowerHammer
參考看看
CDO物件.AddAttachment "C:\檔案1.abc"
CDO物件.AddAttachment "C:\檔案2.def"
CDO物件.AddAttachment "C:\檔案3.ghi"

# re: 如何使用 CDO 物件來寄 E-Mail 5/29/2007 6:46 PM kenj
我有參考上訴述方法編寫,程式執行正常,但都沒收到mail
問題出在哪裡?

# re: 如何使用 CDO 物件來寄 E-Mail 6/11/2007 1:12 PM Power Hammer
不好意思,晚回覆
一般會不OK
應該都是在 SMTP Server 的部份
如果是 Hinet 的
那 msa.hinet.net , msXX.hinet.net 應該都可以的


# re: 如何使用 CDO 物件來寄 E-Mail 6/23/2007 11:53 AM LittleMonkey
請問..我專案的Option Strick為ON,使得With...End With中的內容出現小蚯蚓..告知Option Strick ON 不允許晚期繫結... 請問這要怎改呢?? 謝謝!
ps.除了將Option Strict ON改為Option Strict為OFF

# re: 如何使用 CDO 物件來寄 E-Mail 6/23/2007 2:13 PM Power Hammer
那就把 With / End With 拿掉
直接用 物件.屬性 = 來處理

objCDO.Sender = "A"
objCDO.From = "B"
objCDO.To = "C"


# re: 如何使用 CDO 物件來寄 E-Mail 6/25/2007 9:43 AM LittleMonkey
還是一樣會有毛毛蟲 無法晚期繫結..
請問CDO是否只能在Windows2000上使用?

# re: 如何使用 CDO 物件來寄 E-Mail 6/25/2007 2:21 PM Power Hammer
您好,我的電腦是WinXP,也是可以的喔
另外,這裡的語法是VB6,不過理論上VB.Net 也是可以通用的
因為 Option Strick ON 的關係
所以較嚴格,可能在 Late binding 時會有些問題
這部份,可以透過 Activator.CreateInstance 來替代 CreateObject



先 Imports System.Runtime.InteropServices

Dim tp as Type = Type.GetTypeFromProgID("CDO.Message")
Dim cdo As Object = Activator.CreateInstance(tp)

之後在
tp.InvokeMember("Sender", BindingFlags.SetProperty, null, cdo, new object() { "Sender放這裡" })

用完在釋放COM物件
Marshal.ReleaseComObject(tp)

但降子太麻煩囉

其實 , VB.Net 可直接使用 System.Net.Mail.MailMessage

請參考 Easy 大大的 網站
http://blog.blueshop.com.tw/zeasychen/archive/2006/11/25/45579.aspx


# re: 如何使用 CDO 物件來寄 E-Mail 6/27/2007 11:43 AM LittleMonkey
謝謝您提供的資訊,我改用System.Net.Mail 的方式可以RUN了!
但有個問題是..如果遇到需要驗證的SMTP 不知System.Net.Mail 中的方法是否有提供...???

# re: 如何使用 CDO 物件來寄 E-Mail 7/2/2007 11:27 AM 小和
我再很多地方找過寄信收信的方式

可是收信 (含附加檔案) 卻找不到方式解決

不知道各位先進有沒有人遇到這問題的

或者是說可以取用outlook 或者 outlook express的收件資料夾的內容

# re: 如何使用 CDO 物件來寄 E-Mail 7/2/2007 11:27 AM 小和
我再很多地方找過寄信收信的方式

可是收信 (含附加檔案) 卻找不到方式解決

不知道各位先進有沒有人遇到這問題的

或者是說可以取用outlook 或者 outlook express的收件資料夾的內容

我的email cheneho@hotmail.com

# re: 如何使用 CDO 物件來寄 E-Mail 7/10/2007 4:54 PM Power Hammer
http://www.fontstuff.com/outlook/oltut01.htm
參考看看囉

# re: 如何使用 CDO 物件來寄 E-Mail 10/15/2007 3:06 PM wynne
請問一下cdonts.newmail與cdo.message 有何差別?

# re: 如何使用 CDO 物件來寄 E-Mail 10/31/2007 5:25 PM wynne
請問一下寄二個以上的附件要怎麼處理??

# re: 如何使用 CDO 物件來寄 E-Mail 11/19/2007 12:06 PM Power Hammer
二個以上的附件 , 請試試
objCDO.AddAttachment "C:\A.zip"
objCDO.AddAttachment "C:\B.rar"
objCDO.AddAttachment "C:\C.cab"

# re: 如何使用 CDO 物件來寄 E-Mail 11/19/2007 12:13 PM Power Hammer
cdonts.newmail 是 Microsoft CDO for NTS x.x Library
對應檔案是 C:\Windows\system32\cdonts.dll (ActiveX dll)
使用時要啟動 Simple Mail Transfer Protocol (SMTP) 服務

cdo.message 是 Microsoft CDO for Windows 2000 Library
對應檔案是 C:\WINDOWS\system32\cdosys.dll

兩個是不同的元件


# re: 如何使用 CDO 物件來寄 E-Mail 12/18/2007 10:45 AM C.F
我寄了mail之後,由接收那端去看,用右鍵選項發現其Received的部會出現from xxx.xxx.xxx.xxx 的IP,此IP就是 我寄信的那台IP,可是我看了一下別人的都是出現 mail sever的IP,請問一下是什麼問題。

# re: 如何使用 CDO 物件來寄 E-Mail 1/15/2009 5:02 PM May
請問
"誰是寄件者@NoOneKnows.com"
是否可讓收件人
看到
寄件者: "蔡小白" <誰是寄件者@NoOneKnows.com>
現在是

寄件者: "誰是寄件者@NoOneKnows.com" <誰是寄件者@NoOneKnows.com>


謝謝!!

# 網址, E-mail 出現奇怪的"驚嘆號" 3/3/2009 3:07 PM PK
大大您好:


我使用這個元件寄信,收發都沒有問題
奇怪的地方是,如果信件內容中有出現 E-mail 或者 網址
有時候收到的信件內容,居然會莫名奇妙多出一個 "! (驚嘆號)"


例如:mymail@msa.hinet.net 會變成 mymail@msa.hinet!.net

圖片也是:
http://www.midwife.url.tw/epaper/epaper/20090218/images/mid_1_01.jpg 會變成 http://www.midwife.url.tw/epaper/epaper%!0a/20090218/images/mid_1_01.jpg (多出 "%!0a 轉碼回來就是 驚嘆號")

問題到底是出在哪裡呢 ?
是元件本身的 BUG ??
還是跟伺服器有關 ??

網站是架在 智邦的 Windows 進階主機

# re: 如何使用 CDO 物件來寄 E-Mail 5/4/2009 12:52 AM 四維
大大您好:

請問 .Send 後,
要如何得知 Send 成功

# re: 如何使用 CDO 物件來寄 E-Mail 3/10/2010 11:45 AM Lan
請問如何取得 .Send Error (有沒有Return)?


What do you have to say?

Title:
Name:
Url:
驗證碼  
Comments: