shell 脚本 - 在不公开电子邮件地址的情况下向用户发送邮件
shell script - Sending mails to users without disclosing email addresses
我正在尝试在我的 shell 脚本中使用 mailx 向用户发送邮件而不公开电子邮件地址。
这是我的一段代码-
query1=$(sqlplus -s ${ORA_UID_PSWD} << 'EOF'
set heading OFF
SELECT cu.cntct_email
FROM cm_user cu, cm_usertype ct
WHERE trunc(cu.xprtn_dt) = trunc(sysdate) - 60
AND cu.cm_user_id=ct.cm_user_id
AND ct.user_type = 'E'
AND cu.cntct_email is not null;
EOF
)
user_list1=$(echo "$query1" | tr '\n' ',' | sed 's:^.\(.*\).$::')
echo $user_list1
echo -e "Hi,\nFYI.. Your password is expired 60 days ago. Please login and get it reset.\n\nThanks" |mailx -s "Password expired" -b $user_list1
我尝试使用 -b
选项 (BCC),但出现错误 -
Send options without primary recipient specified.
用法:
mailx -eiIUdEFntBDNHRV~ -T FILE -u USER -h hops -r address -s SUBJECT -a FILE -q FILE
-f FILE -A ACCOUNT -b USERS -c USERS -S OPTION users
任何人都知道如何在不使用 To(Primary reciepnt) 的情况下发送
mailx 显然不能没有 TO,而是使用 mutt...
示例:
echo "My Message" | mutt -s "My Subject" -b addr1@domain.com -b addr2@domain.com -b addr3@domain.com
如果 mailx
没有按照您的要求进行,您可以直接与 sendmail
交谈。
# Speculative; see below
PATH=/usr/libexec:$PATH
query1=$(sqlplus -s "$ORA_UID_PSWD" << 'EOF'
set heading OFF
SELECT cu.cntct_email
FROM cm_user cu, cm_usertype ct
WHERE trunc(cu.xprtn_dt) = trunc(sysdate) - 60
AND cu.cm_user_id=ct.cm_user_id
AND ct.user_type = 'E'
AND cu.cntct_email is not null;
EOF
)
# no need for further normalization of $query1 actually
sendmail -oi $query1 <<'EOF'
Subject: Password expired
To: undisclosed-recipients:;
Hi,
FYI... Your password has expired 60 days ago.
Please login and get it reset.
Thanks
EOF
如果 sendmail
不在您的 PATH
中,可能会更新您的 PATH
(也许就在这个脚本中),这样就可以了。常见位置包括/usr/sbin
、/usr/libexec
等;但如果这些没有帮助,请查阅您平台的文档以获得更好的猜测。
不需要显式 Bcc:
header;当您在命令行上指定收件人时,Sendmail 实际上会忽略 header。
发送没有任何收件人的邮件的标准方法是使用 group syntax 和空地址列表。组的显示名称可用于向实际收件人提供一些有关其他人可能已收到邮件的信息。
一个常用的例子是:undisclosed-recipients: ;
(在命令行使用时记得'quote')
我正在尝试在我的 shell 脚本中使用 mailx 向用户发送邮件而不公开电子邮件地址。
这是我的一段代码-
query1=$(sqlplus -s ${ORA_UID_PSWD} << 'EOF'
set heading OFF
SELECT cu.cntct_email
FROM cm_user cu, cm_usertype ct
WHERE trunc(cu.xprtn_dt) = trunc(sysdate) - 60
AND cu.cm_user_id=ct.cm_user_id
AND ct.user_type = 'E'
AND cu.cntct_email is not null;
EOF
)
user_list1=$(echo "$query1" | tr '\n' ',' | sed 's:^.\(.*\).$::')
echo $user_list1
echo -e "Hi,\nFYI.. Your password is expired 60 days ago. Please login and get it reset.\n\nThanks" |mailx -s "Password expired" -b $user_list1
我尝试使用 -b
选项 (BCC),但出现错误 -
Send options without primary recipient specified.
用法:
mailx -eiIUdEFntBDNHRV~ -T FILE -u USER -h hops -r address -s SUBJECT -a FILE -q FILE
-f FILE -A ACCOUNT -b USERS -c USERS -S OPTION users
任何人都知道如何在不使用 To(Primary reciepnt) 的情况下发送
mailx 显然不能没有 TO,而是使用 mutt...
示例:
echo "My Message" | mutt -s "My Subject" -b addr1@domain.com -b addr2@domain.com -b addr3@domain.com
如果 mailx
没有按照您的要求进行,您可以直接与 sendmail
交谈。
# Speculative; see below
PATH=/usr/libexec:$PATH
query1=$(sqlplus -s "$ORA_UID_PSWD" << 'EOF'
set heading OFF
SELECT cu.cntct_email
FROM cm_user cu, cm_usertype ct
WHERE trunc(cu.xprtn_dt) = trunc(sysdate) - 60
AND cu.cm_user_id=ct.cm_user_id
AND ct.user_type = 'E'
AND cu.cntct_email is not null;
EOF
)
# no need for further normalization of $query1 actually
sendmail -oi $query1 <<'EOF'
Subject: Password expired
To: undisclosed-recipients:;
Hi,
FYI... Your password has expired 60 days ago.
Please login and get it reset.
Thanks
EOF
如果 sendmail
不在您的 PATH
中,可能会更新您的 PATH
(也许就在这个脚本中),这样就可以了。常见位置包括/usr/sbin
、/usr/libexec
等;但如果这些没有帮助,请查阅您平台的文档以获得更好的猜测。
不需要显式 Bcc:
header;当您在命令行上指定收件人时,Sendmail 实际上会忽略 header。
发送没有任何收件人的邮件的标准方法是使用 group syntax 和空地址列表。组的显示名称可用于向实际收件人提供一些有关其他人可能已收到邮件的信息。
一个常用的例子是:undisclosed-recipients: ;
(在命令行使用时记得'quote')