javamail+postfix发送邮件
由于在做项目时,需要用到邮箱服务。但是不想使用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发送邮件的更多相关文章
- Linux服务器用postfix 发送邮件延迟 阻塞 被接收方拒绝等问题
Linux服务器用postfix 发送邮件延迟 阻塞 被接收方拒绝等问题 postfix如何设置发送邮件延迟通知 1 */1 * * * /bin/bash /home/delete_postfix. ...
- Java + 腾讯企业邮箱 + javamail + SSL 发送邮件
说实话腾讯的企业邮箱真心不错! 腾讯企业邮箱官网:http://exmail.qq.com/login/ 新用户注册:http://exmail.qq.com/onlinesell/intro 点击开 ...
- Java Web(十三) 使用javamail进行发送邮件,(使用QQ,163,新浪邮箱服务器)
加油加油. --WH 一.发送邮件的原理 在了解其原理之前,先要知道两个协议,SMTP和POP3 SMTP:Simple Mail Transfer Protocol,即简单邮件传输协议,发送邮件的协 ...
- 解决iredmail下postfix发送邮件时报错[need fully-qualified hostname]
iredmail配置好后,尝试从一客户端的OE中发送邮件,结果报错,在mail主机中查看tail /var/log/maillog,发现如下错误信息: Oct :: mail2 postfix/smt ...
- JavaMail直接发送邮件
一般用JavaMail发送邮件都需要先登录到外部smtp服务器(如smtp.163.com) 二次转发,其实只要得到域名的邮件交换服务器地址(MX)就可以直接将邮件发出 这里用到了dnsjava(下载 ...
- Python 使用 Postfix 发送邮件
最近在做一个监控程序,需要用邮件发送告警.以前是使用注册的免费邮来发送,但是这样不免有很多限制,而且有时还会当作恶意登录,帐号异常等,还不让登录邮箱了.利用Postfix提供邮件SMTP服务,可以很自 ...
- web开发(九) 使用javamail进行发送邮件,(使用QQ,163,新浪邮箱服务器)
在网上看见一篇不错的文章,写的详细. 以下内容引用那篇博文.转载于<http://www.cnblogs.com/whgk/p/6506027.html>,在此仅供学习参考之用. 一.发送 ...
- CentOS使用Postfix发送邮件
1)配置hosts映射 [root@mail ~]# ifconfig ens33 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mt ...
- (更新)Java + 腾讯企业邮箱 + javamail + SSL 发送邮件
咳咳~最头疼的就是莫名其妙的错误. 本来今年6月份运行通过的代码,过俩月就报错了. javax.mail.MessagingException: Could not connect to SMTP h ...
随机推荐
- BAT特殊字符(转)
BAT特殊字符1. 点 与echo连用,作用是换行 示例1 [输出空行] echo. 2 > 定向符[输出] 将命令的输出进行重定向 [一般用于将结果写入文件] 注意 nul 为空设备 > ...
- CodeSmith单表生成实体模板与生成多表实体模板
生成单实体模板: <%@ Template Language="C#" TargetLanguage="C#" %> <%@ Assembly ...
- 如果你需要从不同的服务器(不同域名)上获取数据就需要使用跨域 HTTP 请求
Response.AppendHeader("Access-Control-Allow-Origin", "*")Response.AppendHeader(& ...
- Mongodb更新数组$sort操作符
db.students.update( { _id: 1 }, { $push: { quizzes: { $each: [ { id: 3, score: 8 }, { id: 4, score: ...
- bitnami-redmineserver迁移
1. 背景 在Redmineserver迁移过程中.假设前后两个Redmine的版本号一样,事情就简单,假设版本号不一样,就有可能面临两个版本号数据库不兼容.那就比較麻烦了.本文旨在介绍数据库不兼容时 ...
- 斑马Zebra ZPLII指令集中文说明解释
我们最常用的斑马(Zebra)条码打印机,应用ZPLII命令来控制打印,说明书中有每条指令的详细说明及相关示例,下面是各指令的中文释义: ^A 对Zebra内置点阵字体缩放 ^A(可缩放/点阵字体 ...
- Ubuntu下修改tomcat6默认的8080端口
$ sudo vi /etc/tomcat6/server.xml 将 <Connector port="8080" protocol="HTTP/1.1&qu ...
- Windows 动态库创建和使用 part 2
一.Windows动态库的创建: 1.先选择 "DLL" 和 “控项目” 2.添加一个头文件,一个源文件 CppDll.h,CppDll.cpp,一个模块定义文件 CppDll. ...
- C++ 类的多态三(多态的原理--虚函数指针--子类虚函数指针初始化)
//多态的原理--虚函数指针--子类虚函数指针初始化 #include<iostream> using namespace std; /* 多态的实现原理(有自己猜想部分) 基础知识: 类 ...
- yii2 basic 简洁安装教程
虽然yii官网上说叫咱们用composer安装来安装,但是鄙人感觉这样的安装方式会将自己写的代码共享到github中,因此不太建议大家这样用.下面来给大家介绍basic简洁的安装方法. 第一步,下载b ...