主题:在邮件文本中如何书写超链接?
masachik
[专家分:540] 发布于 2008-12-13 23:39:00
无论用哪种方式在VFP编写的程序中发送邮件,要直接发送,都要将文本斌给一个变量。如果这时需要在文本中引用超链接地址,该如何处理呢?
最后更新于:2008-12-14 23:22:00
回复列表 (共27个回复)
沙发
moz [专家分:37620] 发布于 2008-12-14 01:53:00
按我的看法可以直接按照html代码格式书写,但经过试验后我认为起决定因素的是对方阅读邮件的途径,有的阅读器或邮箱网站,会自动识别网址变成链接方式,有的就不会。
a1='mailto:mozoho@163.com?subject=怎样发邮件&body=<html><body><a href="http://www.sz3tt.cn" title="三通物流公司"><img src="http://blog.programfan.com/upfile/200801/2008012320432.jpg"/></a></body></html>'
板凳
masachik [专家分:540] 发布于 2008-12-14 10:25:00
谢谢,我试试。
3 楼
masachik [专家分:540] 发布于 2008-12-14 18:22:00
试验表明,如果用附一的方式,邮件内容将变为以POSTDATA.ATT为名的附件(由于最初我未改信箱名,可能MOZ前辈已收到这样的信)。如果利用MSMAPI控件编程,使用附二的方式,除打双引号的链接地址名变色并带下划线外,会完全将超文本代码显示为内容(收到的信点超链接地址可打开网页)。不知有没有办法解决附一、附二中的问题?
附一:
a1='mailto:mozoho@163.com?subject=怎样发邮件&body=<html><body><a href="http://www.sz3tt.cn" title="三通物流公司"><img src="http://blog.programfan.com/upfile/200801/2008012320432.jpg"/></a></body></html>'
mr=CreateObject("Microsoft.XMLHTTP")
mr.open("get",a1,.f.)
mr.send(0) && 参数为1或0均会直接发送,不出现写信对话框
release mr
附二:
WITH THISFORM.MAPISess
.LogonUI=.F.
.DownloadMail=.F.
.SignON
ENDWITH
THISFORM.MAPIMess.SessionID=THISFORM.MAPISess.SessionID
WITH THISFORM.MAPIMess
.MSGINDEX=-1
.COMPOSE
.RECIPDISPLAYNAME="mozoho@163.com"
.MSGSUBJECT="标题"
.MSGNOTETEXT='<html><body><a href="http://www.sz3tt.cn" title="三通物流公司"><img src="http://blog.programfan.com/upfile/200801/2008012320432.jpg"/></a></body></html>'
.SEND(1)
ENDWITH
THISFORM.MAPISess.SIGNOFF
4 楼
moz [专家分:37620] 发布于 2008-12-14 20:22:00
按理所当然的想法,附一也应该是发送正文而不是附件,也许是某些邮件处理程序的差别吧。
从你附一附二的结果,我仍然坚持之前的看法:关键是收件人阅读邮件的方式。
如果是智能的邮件阅读器,会自动识别网址并加下划线为链接方式,
如果是文本阅读器,只会识别是文本,
两者几乎都不认html代码的作用,而当作是正文看待了。
是否可以换一种想法,以index.html文件作为附件来发送是否可行?
5 楼
masachik [专家分:540] 发布于 2008-12-15 00:53:00
我用的邮件程序是‘Outlook Express’,用附一、附二两种方式,就是有上面所说的差异(用附一的方式,即使变量值不引用超文本符号,内容也都是以附件形式出现)。
MOZ前辈建议以附件的形式发送超文本文件来解决超链接的问题。我想如果那样的话,对编程的人或收信件的人说来,都有点麻烦。不如在附二的方法中,SEND()方法中使用参数1(打开写信对话框,提供对程序给出的信件的修改),让发件人手工插入超链接。
6 楼
moz [专家分:37620] 发布于 2008-12-15 04:19:00
我的试验方法是在浏览器里输入以下地址,估计跟你在程序里调用的地址是一致的:
[url]mailto:mozoho@163.com?subject=怎发邮件&body=http://www.sz3tt.cn[/url]
然后我发现在我的Outlook Express的下方有三个页面选项:编辑、源文件、预览
我注意到源文件里有html代码,于是使尝试复制该代码,结果发现很多如空格等ASC码等代码会自动转换成转义符,效果并不理想。
但Outlook却自动识别了网址,这个时候我突然想起来,应该是我昨晚设置了发送方式的缘故,所以才会有“编辑、源文件、预览”的选项:
[color=ff00ff]Outlook Express - 工具 - 选项 - 发送 - 邮件发送格式 - HTML[/color]
设置后运行上面的代码,得到网址的便自动成为超链接方式了.可以在源文件页面上看得到的.
我已经证实过了.
7 楼
masachik [专家分:540] 发布于 2008-12-15 12:28:00
MOZ前辈,按您的说明,我查看了Outlook Express的设置,结果我的Outlook Express已经是那种设置。
按您的方法,我将附二的.MSGNOTETEXT的设置改为"尊敬的用户,您好:"+chr(13)+chr(10)+chr(13)+chr(10)+"您在"+注册网站+"软件注册网站的注册信息如下。网盘http://www.sz3tt.cn"这种形式,链接http://www.sz3tt.cn就能正常显示了。唯一不足是,它要提行,不好在它前面加链接提示。
附一的函数始终存在内容变附件的问题。改为下面的函数能正常显示和发送。
a1='mailto:masach@163.com?subject=怎样发邮件&body=http://www.sz3tt.cn 三通物流公司'
DECLARE INTEGER ShellExecute IN shell32.DLL INTEGER HWND,STRING, STRING lpszFile, STRING, STRING, INTEGER
ShellExecute(0,"open",a1,0,0,1)
愦憾的是,我不知道这函数的参数,不知用它能不能直接发送,也不知可不可发附件。
8 楼
moz [专家分:37620] 发布于 2008-12-15 14:04:00
在网上看了一下,看到有用CDO方式发送的,代码如下:
Email = CreateObject("CDO.Message")
Email.From = "vfp001@sohu.com"
Email.To = "mozoho@163.com"
Email.Subject = "国内空运代理!"
Email.Textbody = "你收到用VFP代码发送的邮件了!"
Email.HtmlBody="国内航空货运:<a href=http://www.sz3tt.cn>三通物流</a>"
Email.AddAttachment("C:\boot.bak")
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.sohu.com"
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "vfp001"
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "123456"
Email.Configuration.Fields.Update
Email.Send
事实上并没有成功,我估计是服务端不接收明文密码又或者验证通不过之类的吧,也许可以换一些小一点的免费邮箱试试是否能成功.
[url]http://bbs.pfan.cn/post-286041.html[/url]
这一张贴说的是用MAPI控件发送的,但具体使用方法我没有办法实现,
因为我在插入ActiveX控件的时候找不到该控件.
9 楼
masachik [专家分:540] 发布于 2008-12-15 18:34:00
我附二的代码就是按你介绍的“286041.html”网页处理的。您介绍的CDO方式,我的试验显示,五个Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing")函数使用方法不对(函数参数的值、数目或类型无效)
10 楼
moz [专家分:37620] 发布于 2008-12-15 20:16:00
在我这里可能通过呢,
不过我查过CDO方式也许是不需要这些.Item( )的,
好像前提是当前操作系统使用了邮件服务器方式,
我安装的是2003,也装了IIS,但具体的设置我还是没有弄明白,
或者你可以看看这个是否有帮助.
[url=http://www.microsoft.com/china/technet/community/scriptcenter/resources/hey1129.mspx]微软的脚本指导[/url]
我来回复