最近要写一段服务器端发送邮件的代码,由于服务器有可能是Linux也有可能是HP Unix。一开始打算直接调用mail命令发送,结果在HP Unix上编译出错,后来发现mail的选项在Linux和HP Unix是不同的。 所以必须要考虑到平台的可移植性。要发送的邮件包括附件,cc, bcc列表,一开始我以为这没什么可难的,不就是跨平台吗? 预定义宏就解决了,于是#ifdef HPUNIX....就出来了,这回到时编译没问题了,可是在HP Unix上用mail命令没办法cc啊, 赶快google,原来HP Unix的mail命令确实不支持类似-c -b的选项。对HP Unix的mail命令实在是无语了。有些人给出建议说不就是cc吗,cc和收件人也没什么区别,就直接将cc列表直接放在收件人后面,这样也能达到发送到多个人的目的。说的是没错,拿来一试,用outlook一看,邮件头的cc列表是空的,想要cc的邮件地址都到收件人后面去了。这原本也没什么,可苛刻的老大坚决不同意了。没办法,我打算在HP Unix中放弃使用mail命令了。最后我选择了sendmail来发送邮件,并采用下面的这种方式发送邮件,也避免了跨平台的问题。
const std::string MAIL="/usr/sbin/sendmail";
std::string mailstr = "";
std::string subject = "XXX"
std::string cclist = "xxx,xxx";
std::string bcclist = "xxx,xxx";
std::string from = "xxxsss";
mailstr += "(cat <<OUTPUT; cat " + localpath + "/" + filename + ")";
mailstr += " | " + MAIL + " -t "
if (!from.empty())
mailstr += "/nFrom: " + from;
if (!subject.empty())
mailstr += "/nSubject: " + subject;
if (!cclist.empty())
mailstr += "/nCc: " + cclist;
if (!bcclist.empty())
mailstr += "/nBcc: " + bcclist;
mailstr += "/nOUTPUT";
system(mailstr.c_str());