Linux命令行下如何发送邮件

By admin, 13 十一月, 2015

Linux命令行下有很多发邮件的软件,不熟悉的话会搞得很乱,不知道在哪里配置,不知道log在哪里,不知道怎样调试。一般云服务器不允许25端口。因此,推荐使用phpmailer,使用第三方SMTP发送。

 

(下面的方法曾经成功过,但现在都失败了。)

Linux下发邮件也一直是我感到困惑的问题。我的理解是,只有在服务器本身配置了邮件服务(即这是一台邮件服务器),当前登录用户有对应的邮件账号,命令行下邮件相关的命令才有用。

很久以前我的一台Linux服务器好像不需要做复杂设置就能发邮件,以root@IP或服务器域名之类的方式发送,后来我忘记了怎样设置。加上各类邮箱对垃圾邮件的过滤条件变得越来越严格,那些没有通过认证的邮件服务器发出的邮件很可能是收不到的。

今天又尝试了一下,用mail命令一开始失败,但后来加了-r参数后就成功了。很可能是邮件接收方识别出发出该邮件的服务器域名和声称的邮件来源一致,所以成功了。所以,很可能只有有域名的Linux服务器才能发邮件。

 

echo 'hello body' | mail -s 'hello subject' -r root@host  receiver@email.com

上面的方法在香港一台Ubuntu 14.04的服务器上成功,但在大陆的一台Ubuntu 12.04服务器上却是不成功的。后来安装又卸载sendmail之后运行sendmailconfig就可以发去163的邮箱,但腾讯的企业邮箱收不到。

最近试了一下,安装sendmail也可以使用PHPMailer。

sudo apt-get install sendmail

不需要配置php.ini,默认就可以了。 

可能在/var/log/mail.err中见到以下错误:

unable to qualify my own domain name (iZ94nbe5qnyZ) -- using short name

这时,我们应该修改/etc/hosts文件,添加类似以下的域名解释:

10.169.122.216 iZ94nbe5qnyZ.localdomain iZ94nbe5qnyZ 

 

Mail命令的用法

mail command is most popular command to send emails from Linux terminal. Use few of below examples to send email.

[root@tecadmin ~]# mail -s "Test Subject" user@example.com < /dev/null

-s is used for defining subject for email.

To send email with attachment.

# mail -a /opt/backup.sql -s "Backup File" user@example.com < /dev/null

-a is used for attachments

Also we can add comma separated emails to send email to multiple recipients together.

# mail -s "Test Email"  user@example.com,user2@example.com < /dev/null

安装Mail命令

mail命令可以指向很多个不同的版本,上面命令可以运行的一个版本是mail.mailutils,需要确认/usr/bin/mail的符号链接是指向/usr/bin/mail.mailutils

下面命令可查看postfix待发出邮件的列表:

postqueue -p

下面命令可清空postfix列表:

postsuper -d ALL

 

标签

评论9

Restricted HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id> <img src>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。
验证码
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
请输入"Drupal10"

admin

8 years 2 months 之前

清了缓存之后就可以了,更新了下面的命令,看能不能显示HTML格式。

   

$cmd = "echo '$body' | mail -a 'From: Admin<admin@cto.eguidedog.net>' -a 'MIME-Version: 1.0' -a 'Content-Type: text/html' -s '$subject' myemail@163.com";
    shell_exec($cmd);

bug (未验证)

6 years 12 months 之前

我为什么在多台centos服务器上输入发邮件命令后 也不提示错误 但就是接收不到