1 .JDK发送
**注意:163或qq等邮箱不能使用邮箱密码,而是用 授权码 ,另外邮箱要开启smtp服务!
向qq邮箱发送的邮件,主题和内容不能由test/helloworld/测试 等关键字,否则会被垃圾邮件的屏蔽机制屏蔽掉!**
import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class JavaMail {
private String to;
private String from;
private String username;
private String password;
private String subject;
private String content;
private String smtpServer;
private List<String> list = new ArrayList<String>();
public void sendMail() {
Properties props = System.getProperties();
//邮件服务器
props.put("mail.smtp.host", smtpServer);
//是否使用用户名和密码权限
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props,new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
//建立一个邮件
MimeMessage message = new MimeMessage(session);
//发送方=用户名
message.setFrom(new InternetAddress(from));
//设置接收方
InternetAddress[] address = { new InternetAddress(to) };
message.setRecipients(RecipientType.TO, address);
//邮件主题
message.setSubject(subject);
//邮件正文
Multipart mp = new MimeMultipart();
//邮件内容之一
MimeBodyPart mbp = new MimeBodyPart();
mbp.setText(content);
//将内容包含进正文
mp.addBodyPart(mbp);
//添加附件
for (String fileName : list) {
MimeBodyPart mbpFile = new MimeBodyPart();
//文件上传
FileDataSource fds = new FileDataSource(fileName);
mbpFile.setDataHandler(new DataHandler(fds));
mbpFile.setFileName(new File(fileName).getName());
mp.addBodyPart(mbpFile);
}
//把正文添加到邮件
message.setContent(mp);
message.setSentDate(new Date());//发送时间
//发送邮件
Transport.send(message);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
JavaMail mail = new JavaMail();
mail.setSubject("hello java mail for test 05");
mail.setSmtpServer("smtp.163.com");
mail.setUsername("1********@163.com");
mail.setPassword("xxxxxxxxx");
mail.setTo("916168056@qq.com");
mail.setFrom("1********@163.com");
mail.setContent("this is mail for java mail");
mail.list.add("c:/1.jpg");
mail.list.add("c:/2.jpg");
mail.sendMail();
}
//字段的set方法
}
2.Spring提供邮件接口
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host">
<value>smtp.163.com</value>
</property>
<property name="username">
<value>1*********@163.com</value>
</property>
<property name="password">
<value>xxxxxxxxx</value>
</property>
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.timeout">25000</prop>
</props>
</property>
</bean>
public static void main(String[] args) {
ApplicationContext ac=new FileSystemXmlApplicationContext("WebRoot/WEB-INF/applicationContext.xml");
MailSender sender=ac.getBean("mailSender",MailSender.class);
SimpleMailMessage message=new SimpleMailMessage();
message.setTo("916168056@qq.com");
message.setFrom("1********@163.com");
message.setSubject("springMail for test");
message.setText("test springmail");
sender.send(message);
}
附录:
Java邮件发送协议
1)SMTP(simple mail transfer protocol) 简单邮件传输协议
2)pop3 邮局协议
3)Session(会话)
JavaJDK中javamail MimeMessage多媒体
MimeMessage代表一个邮件