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