从Unix上的C应用程序发送邮件的简单方法

时间:2008-12-04 20:13:01

标签: linux email smtp

我正在设计一个系统,在某些时候需要发送电子邮件通知。所以我正在寻找一种简单的方法来做到这一点。一些背景:系统将在Linux平台上运行,网络上将有一个工作的SMTP服务器,运营商将配置其地址,服务器凭据(如果需要)和目标电子邮件地址列表(不,我不工作大众电子邮件系统;-)。需要发送电子邮件的过程可能用C编写,但超级性能并不是真正的要求,不会发送大量邮件,因此调用某些命令行工具是可以接受的选择。基本上,我过去尝试过类似的任务:

  • 在命令行模式下调用本地sendmail。这是一场噩梦,因为必须支持神秘的sendmail配置。这是我真正想避免的。
  • 直接与SMTP服务器端口通话(EHLO等)。这是一个选项,但对于2008年来说有点太低了; - )。
  • 使用一些MUA与本地sendmail守护程序进行通信,充当邮件中继。这不是很好,因为它需要启动和配置本地sendmail。

所以我需要的是基本上用于C语言的库或简单的命令行MUA,它应该能够与远程sendmail通信(即与我告诉它的SMTP服务器通信),但不要求本地邮件转发

欢迎任何想法!

5 个答案:

答案 0 :(得分:4)

邮件(1)或mailx(1)
此外,由于您有本地MTA,您可以将消息直接传送到sendmail(8)(尽管它的名称 - 是许多MTA用于注入邮件的标准接口)

答案 1 :(得分:1)

这是一个不错的SMTP库,libESMTP

答案 2 :(得分:0)

Perl的Mail::Mailer提供了一种通过本地MTA生成邮件的简单方法(例如来自perldoc -q mail):

use Mail::Mailer;

my $mailer = Mail::Mailer->new();
$mailer->open({
    From    => $from_address,
    To      => $to_address,
    Subject => $subject,
}) or die "Can’t open: $!\n";
print $mailer $body;
$mailer->close();

如果你正在使用C,你可以使用Mail :: Mailer编写一个脚本包装器,或者直接通过shell调用MTA并将格式化的消息写入其中。

答案 3 :(得分:0)

很抱歉,但你要求的是不可能的。为了将邮件发送到另一个系统,您需要某种程序将邮件从一台计算机传输到另一台计算机。根据定义,这样的程序是MTA。

您不必使用Sendmail。你可以像其他海报试图告诉你的那样,使用更轻量级的东西。您所需要的只是可以充当SMTP客户端的东西。你甚至可以在你的程序中构建功能,但你仍然会得到基本上是MTA的东西。

答案 4 :(得分:0)

您是否尝试过sendEmail

我在类似的独立Win32命令行邮件代理Blat上取得了成功,我也在linux上寻找一个不需要系统支持的类似解决方案。

过去我使用ssmtp作为sendmail的轻量级替代品,尽管它通常需要系统范围的配置和支持。虽然这对需要运行MTA的许多应用程序很有用,但我知道它并不能解决您的特定问题。