我可以设置系统邮件以使用外部SMTP服务器吗?


72

是否可以在Linux机器上设置系统邮件,以通过其他smtp服务器发送邮件-甚至可以通过身份验证发送邮件?如果是这样,我该怎么做?

如果不清楚,请举个例子。如果我在命令行输入:

cat body.txt | mail -s "just a test" myfriend@hisdomain.com

是否可以通过外部SMTP服务器(例如G-mail)发送邮件?

我不是在寻找“通过命令行从gmail发送邮件的方法”,而是在配置整个系统以使用特定的SMTP服务器或SMTP服务器上的一个帐户(可能覆盖发件人地址)的选项。


实际上,这是大多数机器的设置方式。您是否有任何特定的MTA?如果不是(包括“什么是MTA?”),您正在运行什么发行版?
吉尔斯2012年

我在Ubuntu 10.04上,发现有关设置ssmtp的这篇文章似乎可行。您能否详细说明如何设置大多数计算机?
cwd 2012年

Answers:


71

我发现sSMTP使用起来非常简单。

在基于Debian的系统中:

apt-get install ssmtp

然后在/etc/ssmtp/ssmtp.conf中编辑配置文件

使用gmail发送电子邮件的示例配置:

# root is the person who gets all mail for userids < 1000
root=your@email.com

# Here is the gmail configuration (or change it to your private smtp server)
mailhub=smtp.gmail.com:587
AuthUser=your@gmail.com
AuthPass=yourGmailPass
UseTLS=YES
UseSTARTTLS=YES

注意:确保系统中存在“ mail”命令。mailutils软件包应该在基于Debian的系统中提供这一功能。

更新:有人(以及针对不同Linux发行版的错误报告)报告说sSMTP将不接受带有'space'或'#'字符的密码。如果sSMTP不适用于您,则可能是这种情况。


2
作为对其他人的说明,您可能必须先安装ssmtp,然后再安装mailutils。我认为mailutils设置了mail命令和ssmtp的符号链接,因此您可以使用常规mail语法:)
cwd 2012年

1
@cwd刚刚在Ubuntu 13.04上进行了测试。我不必安装mailutils软件包(并且不会自动安装)。ssmtp开箱即用。
Pijusn

我刚刚在Debian上的BeagleBone Black上成功使用了它,并且必须先安装mailutils。
戴夫·尼尔森

在Kubuntu 14.04上,必须在ssmtp之后安装mailutils。但是,它在第​​一次尝试时就起作用了。
MariusMatutiae

6
ssmtp不会验证当前debian,ubuntu和redhat发行版上远程服务器的SSL / TLS证书,也不会验证证书的主机名。这是一个主要问题,因为这实际上使加密变得无用,并且您的密码正像纯文本一样被传输,任何人都可以嗅探它。自2009年以来,ssmtp一直没有积极的发展。因此,如果您关心用于服务器外发电子邮件的电子邮件帐户的安全性,请不要使用ssmtp,而应使用后缀(或其他):unix.stackexchange.com/ a / 118101/72087
Zulakis

23

对于后缀

  • 为您的外部邮件中继添加IP,/etc/hosts并为其添加别名邮件中继。
  • 修改后缀配置:

    relayhost = [mailrelay]
    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps = hash:/etc/postfix/smtp_auth
    smtp_sasl_security_options = noanonymous
    
  • 编辑 /etc/postfix/smtp_auth

    mailrelay login:password
    
  • 转换为哈希格式

postmap /etc/postfix/smtp_auth

无需说只有root才能阅读此内容... chmod u=r,og=-


9

mailx支持在CLI上设置smtp服务器...

echo "message" | mailx -S smtp=$smtphost:$smtpport -s "subject line" -v foo@baa.com

只要您的smtp服务器允许您发送未经身份验证的邮件,就不需要安装任何内容。

没有一个答案可以为您可能在Linux机器上安装的所有软件设置smtp服务器。每个电子邮件客户端可以配置SMTP服务器。


请务必放在收件人-S var=val 面前
Benoit Duffez

如果不允许未经身份验证的邮件怎么办?我收到了一封邮件,邮件中没有经过验证的客户端可以发送匿名邮件,
Mian Asbat Ahmad


7

我最喜欢的是电子邮件github)客户端。这非常简单,不需要复杂的配置,不需要依赖项。您可以通过命令行指定smtp-server参数,这意味着它更适合脚本编写。唯一可惜的是,大多数Linux发行版都不包含此工具,因此您需要自己编译。

来自github上的email projet的报价

问:什么是“电子邮件”?

答:'email'是我设计的程序,它将通过命令行将电子邮件发送到远程smtp服务器或在内部使用'sendmail',并与GNUPG进行完全交互以加密和签名电子邮件,因此您决定这样做。 ..您可以在以下网址获取GNUPG:http://www.gnupg.org

感谢cygwin让我知道这个有用的电子邮件客户端。

编译安装

./configure
make
./install.sh --version 3.1.3 --prefix /usr --mandir /usr/share/man --sysconfdir /etc

电子邮件的命令行选项

$ email --help
Options information is as follows
email [options] recipient1,recipient2,...

    -h, -help module          Print this message or specify one of the below options
    -V, -verbose              Display mailing progress.
    -f, -from-addr            Senders mail address
    -n, -from-name            Senders name
    -b, -blank-mail           Allows you to send a blank email
    -e, -encrypt              Encrypt the e-mail for first recipient before sending
    -s, -subject subject      Subject of message
    -r, -smtp-server server   Specify a temporary SMTP server for sending
    -p, -smtp-port port       Specify the SMTP port to connect to
    -a, -attach file          Attach file and base64 encode
    -c, -conf-file file       Path to non-default configuration file
    -t, -check-config         Simply parse the email.conf file for errors
    -x, -timeout              Set socket timeout.
        -cc email,email,...   Copy recipients
        -bcc email,email,...  Blind Copy recipients
        -sign                 Sign the email with GPG
        -html                 Send message in HTML format ( Make your own HTML! )
        -tls                  Use TLS/SSL
    -m, -smtp-auth type       Set the SMTP AUTH type (plain or login)
    -u, -smtp-user username   Specify your username for SMTP AUTH
    -i, -smtp-pass password   Specify your password for SMTP AUTH
    -g, -gpg-pass             Specify your password for GPG
    -H, -header string        Add header (can be used multiple times)
        -high-priority        Send the email with high priority
        -no-encoding          Don't use UTF-8 encoding

样品用法

指定了SMTP服务器的简单邮件

echo "mail body" | email -subject "unix.stackexchange.com Q36982" -from-name LiuYan刘研 -from-addr liuyan@domain.com -smtp-server smtp.domain.com -smtp-port 25 cwd@your-domain.com your-friends@his-domain.com

HTML邮件

echo "<h1>header</h1><p>paragraph</p>" | email -html -subject "unix.stackexchange.com Q36982 HTML mail" cwd@your-domain.com

附件

echo "see the attachment(s)" | email -subject "This is my email.conf file" -attach /etc/email/email.conf -attach cwd@your-domain.com

2

按照页面上的说明设置本地exim SMTP服务器,但从Exim配置的第一个屏幕中选择“ smarthost发送的邮件;无本地邮件”选项。这将在您的机器上设置一个SMTP服务器,该服务器可以接收来自“ mail”或“ mailx”命令的邮件,并将所有邮件转发到smarthost(在您的情况下为Gmail服务器)进行传递。

要通过Gmail服务器发送外发电子邮件,您需要为Exim设置TLS支持,这并不简单。这HOWTO给出了一些解释,这里的具体到Gmail进一步解释的链接。您应该给自己几个小时的时间来完成这项工作。我建议从将邮箱中的电子邮件发送到具有root访问权的启用TLS的SMTP服务器开始,以便您可以在尝试通过Gmail服务器发送邮件之前从双方调试Exim TLS配置。由于通信是加密的,因此您将无法使用tcpdump之类的工具来分析在线协议。


1

如果您的主机具有外部smtp服务器连接,则可以在主机上配置smtp并发送电子邮件。

可以在以下位置找到Linux步骤中的Smtp配置:http : //kerneltalks.com/config/guide-smtp-configuration-linux/

电子邮件命令示例可在以下位置找到:http : //kerneltalks.com/commands/examples-send-email-through-terminal/


答案应包括足够的细节,以独立存在。有链接更加全面的信息是好的,但至少链接材料的一部分应该在回答被引用,因此它可以是后链接倒霉事有用的。
user4556274
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.