由于在做项目时,需要用到邮箱服务。但是不想使用163,qq的,所以就自己搭一个邮箱服务器。

在搜索资料发现postfix是个不错的选择,于是就开始配置了。

这是我搜到的最全的的教程了:http://www.open-open.com/lib/view/open1431592348122.html,但是我没能成功用foxmail登录。

由于找了很多教程,但没有一个能真正成功的,满足我要求的。

根据之前搜到的教程,我成功配置到了内网账户可以相互发邮件,内网可以发到外网,客户端可以连接内网发送到内网,但是不能发送到外网。非常不爽。

于是就想到了,我可以让用户1发送给用户2,用户2再转发出去。

我只不过是想在项目中调用来发一封邮件而已,所以我的postfix只要能发到我的邮箱就可以了,不需要ssl加密之类的,简单一点就好。

准备工作:

首先设置域名的A记录和MX记录

1.添加记录,类型选择A记录,主机记录为mail,记录值为公网IP。

2.添加记录,类型选择MX记录,主机记录为@,记录值为mai.域名。

添加完毕如下图所示

下面开始配置

安装postfix

sudo apt-get install postfix

选择Internet Site

填写域名,例如:example.com

按道理这一步是配置postfix,很多教程都必须配置/etc/postfix/main.cf,但是这里并不需要。

在/etc/postfix/main.cf中找到

inet_interfaces = all

inet_protocols = all

如果是这样的话就不用修改了,否则就修改过来。其他的myhostname、mydestination、mynetworks等不需要修改。默认就好了。

安装mailutils

sudo apt-get install mailutils

这个其实可以不安装的,但是为了方便测试就安装下吧。

配置邮件转发

sudo vim /etc/aliases

修改为

your_email_address就是你接收的邮箱。

使配置生效

sudo newaliases

添加用户

useradd -r -m -s /bin/bash hades

passwd hades

注:hades是用户名

现在所有配置已经做好了,可以发送邮件了

 测试发送

我使用hades账户发送给root用户,root用户会自动转发到我邮箱。

切换到hades用户:su hades

发送邮件:echo "内容"|mail -s "标题" root

查看邮箱

登录邮箱查看是否收到,一般是在垃圾箱里。(不要在垃圾箱找到那就加白名单或者配置DKIM和SPF)

下面是java客户端连接代码

MailAuthenticator.java

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

public class MailAuthenticator extends Authenticator {

	String authenName;//邮箱账号
	String authenPass;//邮箱密码

	public MailAuthenticator(String authenName, String authenPass) {
		super();
		this.authenName = authenName;
		this.authenPass = authenPass;

	}

	public PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication(authenName, authenPass);
	}

}

  

Sent.java

import java.util.Date;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class Sent extends Thread {

	private String usermail;//本系统的邮箱账号密码
	private String password;//本系统的邮箱密码
	private String to;      //目标邮箱
	private String title;   //标题
	private String content; //内容

	public Sent(String usermail, String password, String to, String title,
			String content) {
		super();
		this.usermail = usermail;
		this.password = password;
		this.to = to;
		this.title = title;
		this.content = content;
	}

	@Override
	public void run() {
		sent(usermail,password,to,title,content);
	}

	public void sent(String usermail, String password, String to, String title,
			String content) {
		MailAuthenticator ma = new MailAuthenticator(usermail,password);
		// 这里第一个参数是用户名,第二个是密码。 如果是匿名服务器,可以设置为空
		Transport transport;
		Session sendMailSession;
		Properties props = new Properties();
		sendMailSession = Session.getInstance(props, ma);
		Message newMessage = new MimeMessage(sendMailSession);
		try {
			newMessage.setFrom(new InternetAddress(usermail)); // 发件人
			newMessage.setRecipient(Message.RecipientType.TO,
					new InternetAddress(to)); // 目标邮箱
			newMessage.setSubject(title); // 这个是标题
			newMessage.setSentDate(new Date());
			newMessage.setText(content); // 文本内容

			props.put("mail.smtp.host", "mail.域名");
			props.put("mail.smtp.auth", "true");

			transport = sendMailSession.getTransport("smtp");
			transport.send(newMessage);// 发送
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

Test.java

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class Test {

	public static void main(String[] args) {
		String username;
		String password;
		String to;
		InputStream inStream = Test.class.getResourceAsStream("/mail.properties");
		Properties prop = new Properties();
		try {
			prop.load(inStream);
			username = prop.getProperty("mail.username");
			password = prop.getProperty("mail.password");
			to = prop.getProperty("mail.tomail");
		String emailContent = "Hello eclipse";
		Sent sentMail = new Sent(username,password,to,"This is a test mail",emailContent);
		sentMail.start();
		} catch (IOException e) {
			e.printStackTrace();//应该改成写入日志
		}
	}

}

mail.properties

mail.username=hades@域名
mail.password=密码
mail.tomail=root@域名

javamail+postfix发送邮件的更多相关文章

  1. Linux服务器用postfix 发送邮件延迟 阻塞 被接收方拒绝等问题

    Linux服务器用postfix 发送邮件延迟 阻塞 被接收方拒绝等问题 postfix如何设置发送邮件延迟通知 1 */1 * * * /bin/bash /home/delete_postfix. ...

  2. Java + 腾讯企业邮箱 + javamail + SSL 发送邮件

    说实话腾讯的企业邮箱真心不错! 腾讯企业邮箱官网:http://exmail.qq.com/login/ 新用户注册:http://exmail.qq.com/onlinesell/intro 点击开 ...

  3. Java Web(十三) 使用javamail进行发送邮件,(使用QQ,163,新浪邮箱服务器)

    加油加油. --WH 一.发送邮件的原理 在了解其原理之前,先要知道两个协议,SMTP和POP3 SMTP:Simple Mail Transfer Protocol,即简单邮件传输协议,发送邮件的协 ...

  4. 解决iredmail下postfix发送邮件时报错[need fully-qualified hostname]

    iredmail配置好后,尝试从一客户端的OE中发送邮件,结果报错,在mail主机中查看tail /var/log/maillog,发现如下错误信息: Oct :: mail2 postfix/smt ...

  5. JavaMail直接发送邮件

    一般用JavaMail发送邮件都需要先登录到外部smtp服务器(如smtp.163.com) 二次转发,其实只要得到域名的邮件交换服务器地址(MX)就可以直接将邮件发出 这里用到了dnsjava(下载 ...

  6. Python 使用 Postfix 发送邮件

    最近在做一个监控程序,需要用邮件发送告警.以前是使用注册的免费邮来发送,但是这样不免有很多限制,而且有时还会当作恶意登录,帐号异常等,还不让登录邮箱了.利用Postfix提供邮件SMTP服务,可以很自 ...

  7. web开发(九) 使用javamail进行发送邮件,(使用QQ,163,新浪邮箱服务器)

    在网上看见一篇不错的文章,写的详细. 以下内容引用那篇博文.转载于<http://www.cnblogs.com/whgk/p/6506027.html>,在此仅供学习参考之用. 一.发送 ...

  8. CentOS使用Postfix发送邮件

    1)配置hosts映射 [root@mail ~]# ifconfig ens33 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mt ...

  9. (更新)Java + 腾讯企业邮箱 + javamail + SSL 发送邮件

    咳咳~最头疼的就是莫名其妙的错误. 本来今年6月份运行通过的代码,过俩月就报错了. javax.mail.MessagingException: Could not connect to SMTP h ...

随机推荐

  1. php里面的编码问题

    1 获取当前字符串的编码 $encode = mb_detect_encoding($str, array("ASCII",'UTF-8',"GB2312",& ...

  2. Oauth2.0协议曝漏洞 大量社交网站隐私或遭泄露

    2014年是IT业界不平常的一年,XP停服.IE长老漏洞(秘狐)等等层出不穷,现在,社交网络也爆出惊天漏洞:Oauth2.0协议漏洞 继OpenSSL漏洞后,开源安全软件再曝安全漏洞.新加坡南洋理工大 ...

  3. Linux中history历史命令使用方法详解

    当你在玩Linux的时候,如果你经常使用命令行来控制你的Linux系统,那么有效地使用命令历史机制将会使效率获得极大提升.事实上,一旦你掌 握了我在下面给出的15个有关Linux history历史命 ...

  4. [Android] 通过Menu实现图片怀旧、浮雕、模糊、光照和素描效果

        因为随手拍项目想做成类似于美图秀秀那种底部有一排Menu实现不同效果的功能,这里先简介怎样通过Menu实现打开相冊中的图片.怀旧效果.浮雕效果.光照效果和素描效果.后面可能会讲述怎样通过Pop ...

  5. struts2 在拦截器进行注入(依据Action是否实现自己定义接口)

    比如:经常在Action中都须要获取当前登录的User,就须要获取Session.然后从Session获取当前登录的User,由于这些步骤都是反复操作,能够想办法在拦截器中进行实现.能够自己定义一个接 ...

  6. 简述 Python 类中的 __init__、__new__、__call__ 方法

    任何事物都有一个从创建,被使用,再到消亡的过程,在程序语言面向对象编程模型中,对象也有相似的命运:创建.初始化.使用.垃圾回收,不同的阶段由不同的方法(角色)负责执行. 定义一个类时,大家用得最多的就 ...

  7. 新标准C++程序设计读书笔记_类和对象

    面向对象的程序设计方法 抽象:将某类客观事物共同特点(属性)归纳出来,形成一个数据结构(可以用多个变量描述事物的属性):将这类事物所能进行的行为也归纳出来,形成一个个函数,这些函数可以用来操作数据结构 ...

  8. shader 编程入门(一)

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨)  ...

  9. CentOS6.2下安装中文输入法

    因为在程序中需要输入中文,但是系统没有预装中文输入法,所以就安装一下,顺便记录 1.用root登录 ,或su root2.yum install "@Chinese Support" ...

  10. H4CK1T CTF 2016 Mexico-Remote pentest writeup

    进去网站之后发现连接都是包含类型的,就能想到文件包含漏洞(话说刚总结过就能遇到这题,也算是复习啦) 这里用php://filter/read=convert.base64-encode/resourc ...