1

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

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

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

欢迎任何想法!

4

5 回答 5

4

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

于 2008-12-04T20:15:15.013 回答
1

这是一个不错的 SMTP 库,libESMTP

于 2008-12-04T20:18:20.653 回答
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 编写脚本包装器,或者直接通过外壳调用 MTA 并将格式化的消息写入其中。

于 2008-12-04T21:10:51.890 回答
0

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

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

于 2008-12-05T02:26:54.920 回答
0

你试过sendEmail吗?

我已经成功使用了一个类似的独立 Win32 命令行邮件代理,名为Blat,并且我也在寻找一个类似的不需要系统支持的 Linux 解决方案。

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

于 2009-08-25T14:02:09.187 回答