使用畅邮CyMail(DreamMail)命令行代码发送邮件的应用案例
解决问题搜索关键词:mailto附件问题、命令行、VBA、CMD、MAPI、OUTLOOK,FOXMAIL,DREAMMAIL,CYMAIL
笔者办公协同软件是ACCESS数据库及VBA开发,直接是使用outlook发送邮件,经常出现一些问题,所以寻求使用其他的邮件客户端进行了尝试,搜索发现使用mailto命令行的朋友几乎都没能解决发送附件的问题,在“畅邮使用交流群”群主@木头的帮助下得到了完美的解决。
一、官网下载安装畅邮最新客户端:
http://www.cy-email.com/
二、记事本建立一个文件
文件名固定:F1CBD3E77E274E85AF33018370EBDA65.MAPI
内容为:(前面没有空格)
Subject: [邮件主题]
From:[Email]
To: [收信人]
CC: [抄送]
BCC: [暗送]
Body: [邮件内容,TXT格式]
Html:[邮件内容, HTML格式]
SaveAndClose:[是否直接保存并关闭, 1 或者 0]
SaveAndSend:[是否发送, 1 或者 0]
Attach:[附件名]
例子:
Subject:测试
To: 697336xxxxx@qq.com;abcdxxx@qq.com
CC: Test1xx@qq.com;zengxiquanxxx@gmail.com
BCC: woodstockxxx@gmail.com
Body: 你好,
这是邮件内容第二行
这是邮件内容第三行
SaveAndClose:1
SaveAndSend:1
Attach:c:\1.txt
c:\2.txt
c:\3.zip
特别注意保存格式:ANSI
三、调用方式
3.1 命令行调用
d:\cyemail\dreammail.exe "c:\.....\F1CBD3E77E274E85AF33018370EBDA65.MAPI"
3.2 直接打开MAPI文件方式调用
给MAPI文件设置默认打开方式为cyMail(dreamMail),即鼠标右键打开方式设置一下默认DreamMail,以后直接点击文件即可自动发送。
四、VB/VBA完整测试代码
Private Function GetCyPath() As String '获得畅邮的安装路径
Dim WSH As Object, cyPath As String
Set WSH = CreateObject("Wscript.Shell")
cyPath = WSH.RegRead("HKEY_CLASSES_ROOT\Applications\DreamMail.exe\shell\open\command\")
GetCyPath = Replace(Left(cyPath, Len(cyPath) - 5), """", "")
GetCyPath = Trim(Replace(GetCyPath, "DreamMail.exe", ""))
Debug.Print GetCyPath
Set WSH = Nothing
End Function
'发送邮件的主程序
Public Sub SendToSubjBodyCy(strTo As String, _ '收件人地址
bolHTML As Boolean, _ '忽略本参数
strSubj As String, _ '主题
strBody As String, _ '邮件内容
AttachmentFileName As String, _ '附件
Optional AutoSend As Boolean = True) '自动发送与否,暂未使用
Dim cyPath As String
cyPath = GetCyPath '取得安装路径
'组建文件内容
Dim cc1 As String
Dim bcc1 As String
Dim sv1 As String
Dim sv2 As String
Dim mailS As String
Dim File1 As String
Dim s As String
sbj1 = "Subject:" & strSubj
Addr1 = "To:" & strTo
cc1 = "CC:"
bcc1 = "bcc:"
body1 = "Body:" & strBody
File1 = AttachmentFileName
sv1 = "SaveAndClose:0"
sv2 = "SaveAndSend:1"
mailS = sbj1 & vbCrLf & Addr1 & vbCrLf & cc1 & vbCrLf & bcc1 & vbCrLf & body1 & vbCrLf & sv1 & vbCrLf & sv2 & vbCrLf & "Attach:" & AttachmentFileName
Call SaveFile(cyPath & "F1CBD3E77E274E85AF33018370EBDA65.MAPI", mailS, "GB2312")
s = cyPath & "DreamMail.exe " & cyPath & "F1CBD3E77E274E85AF33018370EBDA65.MAPI"
Shell s
End Sub
Private Sub SaveFile(FilePath As String, strText As String, Optional Charset As String = "GB2312")
Dim Obj As Object
Set Obj = CreateObject("ADODB.Stream")
With Obj
.Mode = 3
.Charset = Charset
.Open
.WriteText strText, 0
.SaveToFile FilePath, 2
End With
Set Obj = Nothing
End Sub
Private Sub Command7_Click()
SendToSubjBodyGy "ZQZHUOXXXX@WL3389.CN", False, "TEST" & Now, "test1kkkkk", "C:\1.TxT", True
End Sub
以上代码在ACCESS VBA环境下测试通过。QQ:6093703 欢迎交流。