我有以下代码
Declare
Outlook_Object OLE2.OBJ_TYPE;
Mail_Object OLE2.OBJ_TYPE;
Item1 OLE2.OBJ_TYPE;
Item2 OLE2.OBJ_TYPE;
OLEPARAM ole2.list_type;
var_Send OLE2.OBJ_TYPE;
var_exit OLE2.OBJ_TYPE;
var_Attach1 OLE2.OBJ_TYPE;
var_Attach2 OLE2.OBJ_TYPE;
BEGIN
SET_APPLICATION_PROPERTY(CURSOR_STYLE,'BUSY');
Outlook_Object := OLE2.CREATE_OBJ('Outlook.Application');
OLEPARAM := OLE2.CREATE_ARGLIST;
OLE2.ADD_ARG(OLEPARAM,'MAPI');
Mail_Object := OLE2.INVOKE_OBJ(Outlook_Object,'GetNameSpace',OLEPARAM);
OLE2.DESTROY_ARGLIST( OLEPARAM );
--newMail
OLEPARAM := OLE2.CREATE_ARGLIST;
OLE2.ADD_ARG(OLEPARAM,0);
Item1 := OLE2.INVOKE_OBJ(Outlook_Object,'CreateItem',OLEPARAM);
OLE2.DESTROY_ARGLIST( OLEPARAM );
-- If you want to display outlook new message screen
-- Item2 := OLE2.INVOKE_OBJ(Item1,'Display');
ole2.set_property(Item1,'To',:To);
ole2.set_property(Item1,'Subject',:Subject);
ole2.set_property(Item1,'Body',:Body);
-- ole2.set_property(Item1,'Date',:F_DT);
--ole2.set_property(Item1,'Date',:F_DT1);
while :F_DT1 = sysdate
loop
OLE2.RELEASE_OBJ( Item1);
OLE2.RELEASE_OBJ( Mail_Object );
OLE2.RELEASE_OBJ( Outlook_Object );
var_Send := OLE2.INVOKE_OBJ(Item1,'Send');
SET_APPLICATION_PROPERTY(CURSOR_STYLE,'DEFAULT');
Message('Mail sent seccessfully.........');
Message('Mail sent seccessfully.........');
if :F_DT1 > :F_DT then
exit_form;
end if;
F_DT1 := F_DT+1;
end loop;
end;
I这里F_DT1 =发送邮件的起始日期。F_DT =发送邮件的截止日期。例如,我在2017年12月8日有活动,我需要从2017年12月4日收到它的提醒邮件,然后我将F_DT1 = 2017年12月4日和F_DT = 2017年12月8日。
我没有遇到任何错误,但我也没有收到任何邮件。我的逻辑正确吗?

发布于 2017-12-31 04:33:56
我更喜欢使用UTL_MAIL (或UTL_SMTP)包从数据库发送邮件。为什么?因为我知道如何做到这一点,而不是您使用的代码:)
显然,我不能帮助解决原始问题,但我可以提供一个变通方法。
我知道这是一个一个月前的问题,所以你可能已经解决了这个问题。如果没有,如果您需要使用UTL_MAIL的帮助,请说出来。
https://stackoverflow.com/questions/47551562
复制相似问题