2013年5月10日星期五

CentOS下使用MSMTP代替Sendmail发送邮件




安装配置msmtp

1、下载、解压 msmtp

先使用putty等工具登陆ssh

wget http://downloads.sourceforge.net/msmtp/msmtp-1.4.16.tar.bz2?modtime=1217206451&big_mirror=0

tar jxvf msmtp-1.4.16.tar.bz2
最新版本参见:http://msmtp.sourceforge.net/download.html

2、安装

cd msmtp-1.4.16
./configure --prefix=/usr/local/msmtp
make
make install
3、配置msmtp账号

切换到,cd /usr/local/msmtp

新建文件夹etc,

mkdir etc
mkdir /var/msmtp
使用vi新建文件,输入:vi /usr/local/msmtp/etc/msmtprc ,编辑内容如下:

# Set default values for all following accounts.
defaults

logfile /var/log/msmtp/msmtp.log

# The SMTP server of the provider.
account mysmtp

# SMTP邮件服务器地址
host smtp.crsay.com

# 发送的邮件Email
from test@crsay.com
auth login

# 邮件服务器登录账号
user mysmtp@crsay.com

# 邮件服务器登陆密码
password 123456

# Set a default account
account default : mysmtp
Esc,shift+:进入命令模式,输入wq,保存退出。

由于password是明码,所以我们需要修改此文件的权限

chmod 600 msmtprc
4、测试

为了方便调用,增加个软链接

ln  -s /usr/bin/msmtp /usr/local/msmtp/bin/msmtp
测试

msmtp youremail@test.com
输入任意字符,然后按Ctrl+D退出,查看邮件是否收到。

由于设置了日志,可以到 /var/log/msmtp/msmtp.log,查看日志,发信成功失败都会有记录。

通过上面的步骤就可以发邮件了,这里发邮件还是使用的是SMTP发的,msmtp相当于一个第三方工具。

在Linux系统内默认使用mail程序调用sendmail来发送邮件,而PHP程序里也是通过mail函数来发送,那么,我们再做如下更改,让mail程序默认使用msmtp,如下:

在命令行和PHP程序内使用mail发送邮件的配置

修改/etc/php.ini

更改sendmail路径

#sendmail_path = /usr/sbin/sendmail -t -i
sendmail_path = /usr/bin/msmtp -t #msmtp1.4不需要-i参数
编辑/etc/mal.rc 新增一行:

set sendmail=/usr/bin/msmtp
至此,在命令行使用mail程序和在php程序里发送邮件的准备就完成了。

在命令行里直接

mail -s "Mail Title" username@mail.com
然后输入邮件内容,按Ctrl+d退出即可

在php程序里使用

mail($to,$subject,$body,$header,"-a my-acct1")
一个简单的PHP发送示例

<?php
$status = mail("***@***.com", //这里修改接收者的地址
               "Test",     //这是邮件的主题
               "Hello \n this test mail",   //这是邮件的内容
               "from: ****@****.com"); //这里修改成发送者的地址
if($status) {
        echo "发送成功.";
} else {
        echo "发送失败";
}
?>
用mail发送的时候使用的root用户,而是用PHP发送的时候一般是单独的web服务帐户如apache/noboday或nginx等,这些帐户没有读取msmtp账户的权限,会导致无法读取配置程序,从而发送失败,解决办法只能是另外指定单独的配置文件
附1、Logwatch应用msmtp实例

修改Logwatch配置文件:

vim /usr/share/logwatch/default.conf/logwatch.conf

LogDir = /var/log
TmpDir = /var/cache/logwatch
MailTo = cracada@gmail.com
MailFrom = 1.2.3.4<syslog@mydomain.com>
Print = No
#Save = /tmp/logwatch
# Archives = Yes
# Range = All
Range = yesterday
Detail = 10
#Service = ftpd-messages   # Processes ftpd messages in /var/log/messages
#Service = ftpd-xferlog    # Processes ftpd messages in /var/log/xferlog
# Maybe you only wanted reports on PAM messages, then you would use:
#Service = pam_pwdb        # PAM_pwdb messages - usually quite a bit
#Service = pam             # General PAM messages... usually not many
#LogFile = messages
#mailer = "sendmail -t"
mailer = "/usr/local/msmtp/bin/msmtp -t"
#HostLimit = Yes
输入logwatch,等执行完毕,去收信即可

如果收信有问题,可以查看msmtp的日志,不论是否发送成功都有记录

附2、安装配置mutt

1、一般Linux都会默认安装mutt,CentOS也不例外

可以使用which mutt查看mutt安装的路径,如果没有安装可以使用 # yum install mutt

2、编辑mutt配置文件

vi /etc/Muttrc ,编辑mutt的总设置,修改以下几行

 
set from=“发送邮件地址”
set sendmail=“/usr/local/msmtp/bin/msmtp”
set use_from=yes  
set realname=“发件人”
set editor=“vi”

发件地址最好与msmtp设置的账号相同,否则可能会出错。

vi ~/.muttrc , 编辑根目录下的设置

 
set envelope_from=yes  
set from=“发送邮件地址”
set realname=“发件人”
set use_from=yes
set charset = “utf-8″
set locale = “utf-8″

3、测试一下mutt是否有效

echo “测试测试” | mutt -s “测试” 测试邮件地址

echo “test” |mutt -s “my_first_test” 23335807@qq.com

下面就可以使用mutt进行邮件备份等工作了,结合cron使用,可以实现的功能相当多。

【Guiplee原创】msmtp+mutt安装、配置、实现自动发邮件


日前写过linux发送邮件的文章:linux使用命令sendmail发送邮件,sendmail在crontab里是不能运行的,所以sendmail不能用来自动发送邮件。所以博主寻求其他方法,百度,谷歌发现用msmtp+mutt可以实现,于是找来教程按照教程进行安装、配置,结果错误百出啊,很多教程都有错误,不一定适用于所有主机。于是博主自己结合自己的系统写了这篇教程,博主的系统是:CentOS release 5.7 (Final)。邮箱使用的是163邮箱。

查看系统版本:

cat /etc/issue

1. 下载
首先下载msmtp,执行命令:

wget http://nchc.dl.sourceforge.net/project/msmtp/msmtp/1.4.28/msmtp-1.4.28.tar.bz2

2. 安装
解压msmtp-1.4.28.tar.bz2  【常用解压和压缩命令】 :

tar -xjf msmtp-1.4.28.tar.bz2

进入msmtp-1.4.28.tar文件夹 :

cd msmtp-1.4.28

安装msmtp:-prefix 为指定文件夹

./configure –prefix=/usr/local/msmtp

make

make install

3.  配置
手动创建文件msmtp.log

touch /usr/local/msmtp/msmtp.log

切换目录到/root

cd ~

创建并编辑 .msmtprc [注意文件名线面的 点 不要漏掉]

vi .msmtprc

输入下面配置内容:

# Example for a user configuration file

# Set default values for all following accounts.

defaults

logfile /usr/local/msmtp/msmtp.log

account 163

host smtp.163.com

# 邮件发送方的邮件地址

from guiplee@163.com

auth login

# 邮箱的用户名,即登陆163邮箱的用户名

user "guiplee"

# 邮箱密码,即登陆163邮箱的用户名password "45664.com"

# Set a default account

account default : 163

保存退出,不会使用vi 命令的请用本地编辑以后上传到/root目录。

下面配置完成以后进行一下简单的测试:

/usr/local/msmtp/bin/msmtp guiplee@gmail.com

输入任意的内容,回车 然后ctrl+D 退出

然后查看邮箱是否收到邮件,有的时候邮件在垃圾箱里面,没收到邮箱请检查配置文件

4. 安装mutt
我这里是Centos系统,所以我直接用 yum安装

yum install mutt

5. 配置mutt
然后在/root 目录下创建并编辑 .muttrc文件【注意文件名的点】

vi .muttrc

输入如下配置:

set sendmail="/usr/msmtp/bin/msmtp"

set use_from=yes

set realname="发信人的名字,比如:网站备份系统"

# 发件人的邮箱,可随便填,例如:10000@qq.com

set from=root@45664.com

set rfc2047_parameters=yes

6. 测试
发送邮件测试

echo "内容" | mutt -s "主题" 361671574@qq.com

 7. 加入 crontab 是系统自动发邮件
将echo "内容" | mutt -s "主题" 361671574@qq.com保存到mail.sh中,进入/root文件夹

cd ~

vi mail.sh

输入如下内容:

#!/bin/bash

echo "contents" | mutt -s "subject" 361671574@qq.com

给mail.sh执行权限:

chmod +x /root/mail.sh

加入crontab让其自动运行:

crontab -e

每天凌晨1:00自动发邮件:

00 1 * * * /root/mail.sh

* 具体的crontab规则请见下一教程。

至此配置完成,实现系统自动发邮件!

希望对大家有帮助

转载请注明出处:http://blog.guiplee.com