HP Unix 发送邮件的问题

本文解决在不同操作系统(Linux与HPUnix)中使用不同命令发送带有附件、抄送及密送列表的邮件问题。通过对比mail命令在不同平台的限制,最终选择sendmail实现跨平台邮件发送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近要写一段服务器端发送邮件的代码,由于服务器有可能是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());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值