发新话题
打印

[求助] CQ中编写的邮件HOOK不能发邮件,也不报错,为什么呢?( 此文章被查看:930次,被回复:8篇!! )

CQ中编写的邮件HOOK不能发邮件,也不报错,为什么呢?

我在Submit-notitfication中利用OleMailMsg定义了一个邮件发送HOOK(HOOK1),用以在Defect提交后自动发送邮件到相关用户,
HOOK运行成功,能够自动发送邮件,代码如下:
#  hook1:send email by OleMailMsg
use Win32::OLE
$session=$entity->GetSession();
$session->OutputDebugString("\nbegin send mail!\n");
$msg = Win32::OLE->new('PAINET.MAILMSG') or $session->OutputDebugMessage("no mailmessage\r\n");
$msg->AddTo([email=]'***@**.com'[/email]);
$msg->SetBody("This is the body");
$msg->Deliver() or $session->OutputDebugMessage("Deliver failed\r\n");
$session->OutputDebugString("\nafter send mail!\n");

由于CQ提供了OleMailMsg和CQMailMsg两个发送邮件的对象,因此我想用CQMailMsg尝试一下,代码如下(hook2):
# hook2:send mail by CQMailMsg
$session = $entity->GetSession();
$session->OutputDebugString("\nbegin send mail");
$aa = $session->IsEmailEnabled();
$session->OutputDebugString  ("\nuser mail is =".$aa);
$mailmsg = CQMailMsg::Build();
$session->OutputDebugString("\nbuild");
$msg_to = "[email=**@**.com]**@**.com[/email]";
$mailmsg->AddTo($msg_to);
$msg_subject = "Hello";
$mailmsg->SetSubject($msg_subject);
$msg_body = "this is a email  for you ";
$mailmsg->SetBody($msg_body);
$mailmsg->Deliver();
$session->OutputDebugString("\nend");
CQMailMsg::Unbuild($mailmsg);

结果运行后没有任何效果(提交Defect后系统没有自动发送邮件),但是设置的测试信息都正常输出了,并且也没有任何出错信息,这是为什么呢?
难道CQMailMsg的使用需要特殊的配置吗?高手们有没有碰到过这种情况?

另外,我将上面运行成功的Hook1代码放到一个test.pl文件中,用CQPerl test.pl解释执行,结果刚才在CQ中运行正常的Hook1部分现在毫无效果,也同样没有报错信息.这又是为什么呢?

本人才开始接触CQ,不知道是否是那些地方没搞懂,请各位大侠高手咄咄指点呢!

[ 本帖最后由 qiouxinyu 于 2007-8-29 14:51 编辑 ]



© 本文为 qiouxinyuSCMLife 共同所有,未经同意,请勿转载 ©如该文侵犯了您的版权,请联系管理员

TOP

你的这个我看了,脚本看上去没有什么问题,
CQMailMsg只有在Perl中才能使用,
其实用这个发邮件没有什么配置,只是要注意IsEmailEnabled就可以了,
如果你要在外不测试改脚本,
请记住一定要先create session,登录session后才能进行相应的操作~



© 本文为 yunshanSCMLife 共同所有,未经同意,请勿转载 ©如该文侵犯了您的版权,请联系管理员

TOP

谢谢楼上的!

HOOK1(用OleMailMsg)和HOOK2(用CQMailMsg)都是在CQ中(默认脚本语言为Perl)中运行的,并且,HOOK2运行时候,对于
IsEmailEnable 测试 输出值为 1 (即用户具有邮件发送的权限)

至于HOOK1, 我将起变为外部应用程序时候,利用Session_Build创建了SESSION的,具体代码如下:
use CQPerlExt;
use Win32::OLE;

$session = CQPerlExt::CQSession_Build();
$session->OutputDebugString("\nbegin send mail!\n");
$msg = Win32::OLE->new('PAINET.MAILMSG') or die("no mailmessage: $!");
$session->OutputDebugMessage("Begin send mail\r\n");
$userEmail = "**@**.com";
$msg->AddTo($userEmail);
# $msg->AddFrom("**@**.com");
$msg->SetSubject('Testing');
$msg->SetBody('This is the body\n you ');
$msg->Deliver() or $session->OutputDebugMessage("Deliver failed\r\n");
$session->OutputDebugString("\nafter send mail!\n");

利用CQPerl test.pl运行后,可以看到 begin send mail 和 after send mail的测试信息,但是
就是没有执行邮件发送.

在网上查了很长时间,关于发邮件的CQ写的代码都和我这个查不多,所以我实在弄不明白为什么无效.

高人们不知道可不可以试着运行下我的那些代码,看是否有效啊,然后,帮助解释下原因吧,拜谢了!



© 本文为 qiouxinyuSCMLife 共同所有,未经同意,请勿转载 ©如该文侵犯了您的版权,请联系管理员

TOP

我认为你的代码还是写的有问题,建议你仔细阅读一下CQ API Reference的Chapter 28. MailMsg Object,
mail方面有两种组件,OleMailMsg for COM, CQMailMsg for Perl,也就是说OleMailMsg在perl下是不被支持的,
从下面的IBM说法中,这一点也被证实了,
Problem
Does ClearQuests OleMailMsg Object support PERL script?  

Solution
QUESTION:
Does ClearQuests OleMailMsg Object support PERL script?

ANSWER:
No, the OleMailMsg Object is not supported for use with PERL script.
An enhancement request has been written against ClearQuest to include this
capability.
The RFE ID is RAMBU00036363.  
(转自: http://www-1.ibm.com/support/docview.wss?uid=swg21121191

© 本文为 yunshan 所有,未经同意,请勿转载
©如该文侵犯了您的版权,请联系管理员

TOP

恩,谢谢yunshan。其实相关的API我已经看过很多次了,不过API无法解决实践中的问题啊.
其实,我的现象是:
在CQ里面编写的Hook,OleMailMsg (我的HOOK1代码)是可以发的(Ole是COM组件,Perl本身不包含,所以不能直接支持,但是use Win32::Ole后就可以用了),偏偏是用CQMailMsg(我的HOOK2代码)不能发邮件。
另外,HOOK1和HOOK2放到外部应用程序中以后,就都不能发送邮件了。
所以,我实在找不出原因。


yunshan斑主,麻烦你了,帮忙解决下这个问题吧,不胜感激!

© 本文为 qiouxinyu 所有,未经同意,请勿转载
©如该文侵犯了您的版权,请联系管理员

TOP

或者有其他的高手来帮忙解释下这个现象呢?

© 本文为 qiouxinyu 所有,未经同意,请勿转载
©如该文侵犯了您的版权,请联系管理员

TOP

回复 #5 qiouxinyu 的帖子

我想邮件没有被发送的原因可能是你在写外部脚本的时候Session没有登录,如下,
$session->UserLogon("admin","","database_name","database_set"),
希望你再试试,我对perl不怎么了解,只能勉强看懂:)

© 本文为 yunshan 所有,未经同意,请勿转载
©如该文侵犯了您的版权,请联系管理员

TOP

我也遇到过这个问题,网上查了一下,好象CQMailMsg对象只支持UNIX和Linux,如果是在windows下写的脚本估计就不行了.


http://publib.boulder.ibm.com/in ... c/c_mailmsg_ovw.htm

© 本文为 sephiroth 所有,未经同意,请勿转载
©如该文侵犯了您的版权,请联系管理员

TOP

http://bbs.scmlife.com/thread-6103-1-1.html
可以参考

搜索了一下 ,发现了解决方法
http://www.cmcrossroads.com/option,com_smf/Itemid,180/topic,72414.msg85631.html
因为我的那个客户端没有配置电子邮件选项。
外部的api还是依赖cq client所配置的smtp选项的

© 本文为 wuqing1185 所有,未经同意,请勿转载
©如该文侵犯了您的版权,请联系管理员

TOP

发新话题