Lotusscript:从发送电子邮件作为网络用户的地址

时间:2012-05-20 19:10:42

标签: lotus-notes lotus-domino lotusscript

我有一个以Web用户身份运行的lotus-script代理,因为我需要知道当前用户是谁并相应地处理信息。问题是,在此代理中发送电子邮件时,“发件人”电子邮件地址显示的是Web用户电子邮件地址,而不是我已定义的电子邮件地址。我在发送电子邮件之前设置了以下字段(作为mime):

    mailDoc.Form = "Memo"
    mailDoc.Subject = strSubject
    mailDoc.InetSendTo = strFrom
    mailDoc.PostedDate = Now
    mailDoc.Principal = strFrom
    mailDoc.FROM = strFrom
    mailDoc.INETFROM = strFrom
    mailDoc.~INetPrincipal = strFrom
    mailDoc.ReplyTo = strFrom
    mailDoc.SendFrom = strFrom
    mailDoc.SentBy = strFrom
    mailDoc.altFrom = strFrom
    mailDoc.tmpDisplaySentBy = strFrom
    mailDoc.DisplaySent = strFrom
    mailDoc.ToShow = strFrom

    mailDoc.SendTo = strSendTo

但是,发件人地址仍然显示为网络用户的地址。我在这里错过了什么?任何帮助都会非常感激。

6 个答案:

答案 0 :(得分:5)

实际上在论坛中搜索我找到了这个古老问题的解决方案(http://www-10.lotus.com/ldd/nd6forum.nsf/0/13706561dc7d693f852570af0062fcec?OpenDocument):

Principle = "customerservice@xyz.com"
maildoc.Form = "Memo"
' Principal overrides From
' Must be formatted as below and must include the domain @xyz.com
' Format should equal: "From User" <fromuser@xyz.com@DOMAIN>
maildoc.Principal = |"Customer Service" <| + Principle + |@xyz.com>|
maildoc.From = Principle
maildoc.AltFrom = Principle
maildoc.SendFrom = Principle
maildoc.INetFrom = Principle
maildoc.tmpDisplaySentBy = Principle
maildoc.tmpDisplayFrom_Preview = Principle
maildoc.DisplaySent = Principle

希望这有助于其他人 - 这对我来说已经很长一段时间了!!

答案 1 :(得分:4)

Lotus Notes中的安全性不允许您通过LotusScript覆盖实际的发件人信息。控制它的唯一方法是将代理的代表属性设置为电子邮件应该来自的用户。但是,您必须使用设计器进行设置,并且无法在运行时更改它。

很难从您的问题中判断出来,但是如果您已经尝试过,并且发现网络用户设置正在代表&#39;而不是代表&#39;设置,您可以尝试将电子邮件的创建拆分为第二个代理,然后让第二个代理不作为Web用户运行。

希望这有帮助!

答案 2 :(得分:3)

字段Principal是正确的解决方案,但真正的发件人名称可能在水下可见。实际上,有不同的解决方案:直接在mail.box数据库中创建邮件。这就是TeamMail模板在OpenNTF上的作用。见http://www.openntf.org/Projects/pmt.nsf/ProjectLookup/Team%20Mail%20Tamer

当然,这不是正确的方法,但如果你想混淆发件人,那就没有其他解决办法了。

嗯,从技术上讲,这并不完全正确:你可以创建一个扩展管理器DLL来更改发件人......脏,你说呢?肯定。

答案 3 :(得分:3)

您的代码的问题是您没有正确设置Principal字段。它应该包含@NotesDomain,其中NotesDomain是您的Domino邮件域。

我在QuerySend

中这样做
    .INetFrom = |"| + strDispName + |" <| + strEmail + ">"
    .Principal =  |"| + strDispName + |" <| + strEmail + "@" + profile.NotesDomain(0) + ">"
    .From = strEmail
    .tmpDisplaySentBy = strEmail

答案 4 :(得分:1)

正如其他人已经说过的那样,除非您在mail.box中创建邮件,否则原始发件人将始终可见。这是Notes / Domino安全性的一部分。

我去年在我的博客上发布了一些代码,在那里你可以看到如何做到这一点: http://blog.texasswede.com/lotusscript-mail-notification-class/

答案 5 :(得分:1)

谢谢你,我保存了第二天的解决方案搜索! )

在我的情况下(从标准邮箱发送通知电子邮件到Domino服务器以外的用户,如info@server.xxx)我只需要将以下字符串添加到备忘录文件:“INetFrom”,并将地址放在那里。

所以,即使查看邮件来源(在gmail帐户上),我只看到“INetFrom”字段中提到的那个人!

所以,最终代码看起来像(XPages SSJS):

try {
    var memo:NotesDocument = database.createDocument();
    memo.appendItemValue("Form", "Memo");
    memo.appendItemValue("Subject", "Subject text");
    memo.appendItemValue("Body", "Body text");
    memo.appendItemValue("SendTo", "userName");
    memo.appendItemValue("INetFrom", "info@server.com");
    memo.send(); 
}catch (e){
    print ("Send Error: " + e);
}