通过MS Exchange从Oracle数据库发送邮件时,BCC未正确处理

carvr3hs  于 2023-06-22  发布在  Oracle
关注(0)|答案(1)|浏览(96)

我通过MS Exchange从Oracle数据库发送电子邮件。使用“UTL_SMTP”。但是如果我使用“BCC”,我会看到所有收件人的邮件源中的邮件头都没有改变。所以每个人都可以看到谁在BCC。
怎么了?我还需要考虑BCC的其他问题吗?
下面是我的测试代码(使用伪邮件主机):

DECLARE
    p_to        VARCHAR2(255 CHAR) := 'recipient1@test.com';
    p_bcc       VARCHAR2(255 CHAR) := 'recipient2@test.com';
    p_from      VARCHAR2(255 CHAR) := 'no-reply@test.com';
    p_subject   VARCHAR2(255 CHAR) := 'Testmail (BCC)';
    p_message   VARCHAR2(255 CHAR) := 'Testmail BCC.';
    p_smtp_host VARCHAR2(255 CHAR) := 'sm.test.com';
    p_smtp_port NUMBER             := 25;
    
    l_mail_conn UTL_SMTP.connection;
BEGIN
    l_mail_conn := UTL_SMTP.open_connection(p_smtp_host, p_smtp_port);
    
    UTL_SMTP.helo(l_mail_conn, p_smtp_host);
    UTL_SMTP.mail(l_mail_conn, p_from);
    
    UTL_SMTP.rcpt(l_mail_conn,p_to);
    UTL_SMTP.rcpt(l_mail_conn,p_bcc);
    
    UTL_SMTP.open_data(l_mail_conn);
    
    UTL_SMTP.write_data(l_mail_conn, 'To: ' || p_to || UTL_TCP.crlf);
    UTL_SMTP.write_data(l_mail_conn, 'BCC: ' || p_bcc || UTL_TCP.crlf);
    
    UTL_SMTP.write_data(l_mail_conn, 'From: ' || p_from || UTL_TCP.crlf);
    UTL_SMTP.write_data(l_mail_conn, 'Subject: ' || p_subject || UTL_TCP.crlf);
    
    
    UTL_SMTP.write_data(l_mail_conn, UTL_TCP.crlf);
    UTL_SMTP.write_data(l_mail_conn, p_message || UTL_TCP.crlf || UTL_TCP.crlf);
    UTL_SMTP.close_data(l_mail_conn);

    UTL_SMTP.quit(l_mail_conn);
END;
/

“www.example.com”的电子邮件来源recipient1@test.com:

...
To: <recipient1@test.com>
BCC: <recipient2@test.com>
From: <no-reply@test.com>
Subject: Testmail (BCC)
...

谢谢!Volker

aemubtdh

aemubtdh1#

好吧,在谷歌搜索了一个小时后,我发现,我必须不设置BCC头。BCC只能使用rcpt()函数发送。
我找到了解决方案here。答案是“...例如,发送一个密件抄送很简单--你只需要RCPT这个人,不要把他们放在抄送中:或TO:记录。这就是问题所在,我设置了一个“BCC”标题。在RFC中,我发现了标题“BCC”,所以我添加了它,不幸的是。
贝斯特,沃克

相关问题