搭建一个邮箱服务器

搭建邮箱服务器的目的,是为了APP的邮箱注册认证

2016-05-16 | 阅读

要配置DNS

一般设置三条DNS信息:

  • A记录,即主机名记录,一般为 mail.luoxianming.cn,然后指向服务器IP地址
  • MX记录,邮件交换记录,域名为luoxianming.cn,目标主机直接指向上面的A记录,即mail.luoxianming.cn.
  • TXT记录,文本记录,域名依旧为luoxianming.cn,文本内容设置为v=spf1 mx -all.

然后测试一下域名是否可以连接:

dig luoxianming.cn -t MX

如果显示域名,则表示配置成功.

搭建邮箱服务器

使用的是Postfix+Dovecot来配置邮箱服务器.安装三个包:

yum    install    postfix
yum    install    dovecot
yum    install    cyrus-sasl

修改/etc/postfix/main.cf文件

myhostname = mail.linuxidc.com
mydomain = linuxidc.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 0.0.0.0/0
home_mailbox = Maildir/
smtpd_sender_restrictions = permit_mynetworks,  permit_sasl_authenticated,  reject_sender_login_mismatch, reject_authenticated_sender_login_mismatch, reject_unauthenticated_sender_login_mismatch 
smtpd_sasl_auth_enable = yes
smtpd_sender_login_maps = hash:/etc/postfix/sender_login_maps

安装好postfix后,就可以直接测试一下邮件发送了,service postfix restart,启动服务后,使用telnet连接邮箱并进行邮件发送:

#连接邮箱服务器
telnet localhost 25
#连接后进行邮件发送,以下每个命令都是以回车发送给postfix的
# 发信人
MAIL FROM:<test@luoxianming.cn>
#填写收件人
RCPT TO:xxxx@qq.com 
#开始写邮件内容
DATA                   
#输入标题
Subject: test message
#输入内容,并以.号结束
test body
.

然后如果看到

250 2.0.0 Ok: queued as 4302280FF4

则表示邮件已经正常发送了,即配置正确.

然后,修改dovecot的配置文件/etc/dovecot/dovecot.conf

protocols = imap pop3 lmtp imaps pop3s
ssl_disable = no
mail_location = Maildir:~/Maildir
disable_plaintext_auth = no

然后直接启动dovecot service dovecot start.并设置两者开机启动

systemctl enable postfix
systemctl enable dovecot
systemctl enable saslauthd

使用useradd来添加一个账号:

# 添加邮件组
groupadd mail_user
# 添加账户
useradd -s /sbin/nologin -g mail_user lxm
useradd -s /sbin/nologin -g mail_user no-reply
# 设置密码
echo lxmlxm | passwd --stdin lxm
echo no-reply | passwd --stdin no-reply

然后启动服务测试一下:

service    postfix    restart
service    dovecot    restart
service    saslauthd    restart

端口开放,IMAP是143,POP3是110,SMTP 是25.三者的区别

  • SMTP是邮件收发
  • POP3是客户端去服务器获取邮件的接口,但只读
  • IMAP也是客户端去服务器请求邮件信息的接口,但是同时可以操作服务器的邮件数据,即可以删除邮件.

后台使用JAVAMail来发送邮件

javamail是在spring框架中的.

首先,设置properties:

#配置服务器邮件账号信息
#服务器
mail.host=smtp.xxx.com
#超时时间
mail.smtp.timeout=25000
#发件人信箱
mail.from=xxx@163.com
#用户名
mail.username=xxx@163.com
#密码
mail.password=123456

然后在spring的配置文件中,即applicationContext.xml中,配置:

<bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage">  
    <property name="from">  
        <value>${mail.from}</value>  
    </property>  
    <!-- 查看SimpleMailMessage源码还可以注入标题,内容等 -->  
</bean>  
<!-- 申明JavaMailSenderImpl对象 -->  
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">  
    <property name="defaultEncoding" value="UTF-8" />  
    <property name="host" value="${mail.host}" />  
    <property name="username" value="${mail.username}" />  
    <property name="password" value="${mail.password}" />  
    <property name="javaMailProperties">  
        <props>  
            <!-- 设置认证开关 -->  
            <prop key="mail.smtp.auth">true</prop>  
            <!-- 启动调试开关 -->  
            <prop key="mail.debug">true</prop>  
            <!-- 设置发送延时 -->
            <prop key="mail.smtp.timeout">0</prop>
        </props>  
    </property>  
</bean>  

然后随便写个简单的方法测试一下:

static ApplicationContext actx = new ClassPathXmlApplicationContext(
		"applicationContext.xml");
static MailSender sender = (MailSender) actx.getBean("mailSender");
static SimpleMailMessage mailMessage = (SimpleMailMessage) actx.getBean("mailMessage");
public static void main(String args[]) throws MessagingException {		
	mailMessage.setSubject("测试邮件");
	mailMessage.setText("测试邮件");
	mailMessage.setTo("XXXX@qq.com");
	sender.send(mailMessage);
}

然后是HTML格式的邮件发送,这是就不能使用simpleMessage:

	MimeMessage mailMessage = sender.createMimeMessage();
	MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,true);
	messageHelper.setFrom("XXXX@qq.com");
	messageHelper.setTo("XXXX@qq.com");

	messageHelper.setSubject("测试邮件中嵌套图片!!");
	// true 表示启动HTML格式的邮件
	messageHelper.setText(
			"<html><head></head><body><h1>hello!!spring image html mail</h1>"
				+"<a href=http://www.baidu.com>baidu</a>"	+ "<img src=cid:image/></body></html>", true);
	// 上传图片
	FileSystemResource img = new FileSystemResource(new File("单.png"));

	messageHelper.addInline("image", img);//跟cid一致
	messageHelper.addAttachment("单.png", file);//添加到附件
	sender.send(mailMessage);
	System.out.println("邮件发送成功...");