import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.internet.MimeMessage.RecipientType;
import java.io.Console;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.Properties;
public class Main {
public static void main(String[] args) throws MessagingException, IOException
{
Properties props = new Properties();
try (InputStream in = Files.newInputStream(Paths.get("mail", "mail.properties")))
{
props.load(in);
}
List<String> lines = Files.readAllLines(Paths.get(args[0]), Charset.forName("UTF-8"));
String from = lines.get(0);
String to = lines.get(1);
String subject = lines.get(2);
StringBuilder builder = new StringBuilder();
for (int i = 3; i < lines.size(); i++)
{
builder.append(lines.get(i));
builder.append("\n");
}
Console console = System.console();
String password = new String(console.readPassword("Password: "));
Session mailSession = Session.getDefaultInstance(props);
// mailSession.setDebug(true);
MimeMessage message = new MimeMessage(mailSession);
message.setFrom(new InternetAddress(from));
message.addRecipient(RecipientType.TO, new InternetAddress(to));
message.setSubject(subject);
message.setText(builder.toString());
Transport tr = mailSession.getTransport();
try
{
tr.connect(null, password);
tr.sendMessage(message, message.getAllRecipients());
}
finally
{
tr.close();
}
}
}
首先,应该注意在project structure中的Global libraries中引入Javamail的相关API。
接着是对程序正文的解读,还是同样的方式,从文件路径名得到一个Path,由这个Path对象得到一个InputStream。
接着,Properties的对象props从输入字节流中读取属性列表(键和元素对),
接着,使用Files的readAllLines(Path, Charset)方法按照UTF-8编码的方式将(邮件文件)的每一行读到一个String中,共同组成一个List<String>。第一行的发送方读取到from中,第二行的接收方放到to中,主题(subject)放到subject里。
将其他行放到一个新建立的StringBuilder里,
然后建立一个与当前虚拟机相关联的唯一控制台对象。
来做一个总结:将相关信息放到一个Properties对象中,
再建立一个控制台,用于输入密码,
建立一个会话Session对象(根据Properties文件创建),根据此Session对象创建一个MimeMessage对象,设置发送方,接收方、主题、文本等信息,
根据Session对象创建一个Transport对象。首先连接到主机(用户名,密码)