📄 mailsendframe.java
字号:
//e-mail SMTP 支持html文本 多附件 验证 界面
import java.awt.*; import java.awt.Color;
import java.awt.Component;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import javax.swing.*; import com.swtdesigner.FocusTraversalOnArray;
public class mailSendFrame extends JFrame{
//javamail Session对象
private JLabel label;
protected Session session;
//java message对象
protected MimeMessage mesg;
protected Multipart mp;
//GUI
public JLabel smtpLab=new JLabel("SMTP服务器",SwingConstants.CENTER);
public JTextField smtpTF=new JTextField("smtp.163.net",20);;
public JLabel userLab=new JLabel("发送者邮箱",SwingConstants.CENTER);
public JTextField userName=new JTextField("madass@163.net",20);;
public JLabel pwLab=new JLabel("登陆密码",SwingConstants.CENTER);
public JPasswordField passWord=new JPasswordField(20);;
public JLabel recpLab=new JLabel("收信者邮箱",SwingConstants.CENTER);
public JTextField recp=new JTextField("zealVampire@tom.com",20);
public JLabel subjectLab=new JLabel("主题",SwingConstants.CENTER);
public JTextField subject=new JTextField("HelloMail",20);
public JButton browser=new JButton("浏览附件");
public JTextArea msg=new JTextArea(12,10);
public JButton sendBT=new JButton("发送邮件");
public JButton clearBT=new JButton("清除文本");
//附件
Vector files=new Vector();
public mailSendFrame(String str){
super(str);
Container cp=getContentPane();
cp.setLayout(new BorderLayout());
//north
JPanel paneNorth=new JPanel();
paneNorth.setActionMap(null);
paneNorth.setTransferHandler(null);
paneNorth.setFocusCycleRoot(true);
paneNorth.setLayout(new GridLayout(6,2));
paneNorth.setBackground(Color.cyan);
paneNorth.add(smtpLab);
paneNorth.add(smtpTF);
paneNorth.add(userLab);
paneNorth.add(userName);
paneNorth.add(pwLab);
paneNorth.add(passWord);
paneNorth.add(recpLab);
paneNorth.add(recp);
paneNorth.add(subjectLab);
paneNorth.add(subject);
label = new JLabel("选择附件",SwingConstants.CENTER);
label.setForeground(Color.BLACK);
paneNorth.add(label);
paneNorth.add(browser);
browser.setForeground(Color.BLUE);
browser.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JFileChooser chooser=new JFileChooser();
int returnVal;
returnVal=chooser.showOpenDialog(mailSendFrame.this);
if(returnVal==JFileChooser.APPROVE_OPTION){}
files.addElement(chooser.getSelectedFile().getPath());
System.out.println(chooser.getSelectedFile().getPath());
}
});
cp.add(paneNorth,BorderLayout.NORTH);
paneNorth.setFocusTraversalPolicy(new FocusTraversalOnArray(new Component[] {smtpLab, smtpTF, userLab, userName, pwLab, passWord, recpLab, recp, subjectLab, subject, label, browser}));
//center
JScrollPane msgScroll=new JScrollPane(msg);
cp.add(msgScroll,BorderLayout.CENTER);
//south
JPanel panelSouth=new JPanel();
panelSouth.setBackground(Color.cyan);
panelSouth.add(sendBT);
sendBT.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
doSend();
}
});
panelSouth.add(clearBT);
clearBT.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
msg.setText("");
}
});
cp.add(panelSouth,BorderLayout.SOUTH);
setSize(400,300);
pack();
}
//添加附件
public void affix() {
String fileAffix;
Enumeration enume=files.elements();
while(enume.hasMoreElements()){
try{
MimeBodyPart mbp=new MimeBodyPart();
fileAffix=enume.nextElement().toString();
FileDataSource fs=new FileDataSource(fileAffix);
mbp.setDataHandler(new DataHandler(fs));
mbp.setFileName(MimeUtility.encodeWord(fs.getName(),"GB2312",null));
//防止文件名字中文乱码
mp.addBodyPart(mbp);
}
catch(Exception e){
JOptionPane.showMessageDialog(this,"附件增加出错"+e);
}
}
files.removeAllElements();
}
//工作方法:发送邮件给smtp服务器
public void doSend(){
//java mail 允许处理许多的属性Properities
Properties props=new Properties();
props.put("mail.smtp.host",smtpTF.getText());
props.put("mail.smtp.auth","true");
//Session
session=Session.getDefaultInstance(props,null);
session.setDebug(true);
try{
mp=new MimeMultipart();//千万要小心,Multipart是抽象类,必须初始化为MimeMultipart
//MIME message
mesg=new MimeMessage(session);
mesg.setFrom(new InternetAddress(userName.getText()));
//To 地址//这里其实可以群发,用一个InternetAddress[],之后用mesg.addRecipients(..)
InternetAddress toAddress=new InternetAddress(recp.getText());
mesg.addRecipient(Message.RecipientType.TO,toAddress);
//cc地址
//InternetAddress ccAddress=new InternetAddress(message_cc);
// mesg.addRecipient(Message.RecipientType.CC,ccAddress);
//主题
mesg.setSubject(subject.getText());
//正文body支持html,自己写好看的脚本的啊
MimeBodyPart bp=new MimeBodyPart();
bp.setContent("<meta content=text/html; charset=gb2312>"+msg.getText(),"text/html;charset=GB2312");
mp.addBodyPart(bp);
//附件
if(!files.isEmpty()) affix();
mesg.setContent(mp);
mesg.saveChanges();
mesg.setSentDate(new Date());
//发送邮件
Transport transport = session.getTransport("smtp");
StringTokenizer tempName=new StringTokenizer(userName.getText(),"@");
transport.connect(smtpTF.getText(),tempName.nextToken(),passWord.getText());
transport.sendMessage(mesg,mesg.getRecipients(Message.RecipientType.TO));
//transport.send(mesg);
//Transport.send(mesg);
//transport.sendMessage(mesg, mesg.getAllRecipients());
JOptionPane.showMessageDialog(this,"邮件发送成功!");
}catch(Exception ex){
JOptionPane.showMessageDialog(this,"邮件发送失败,请检查网络或者参数"+ex);
}
}
public static void main(String[] av){
JFrame.setDefaultLookAndFeelDecorated(true);
mailSendFrame sm=new mailSendFrame("javaMail for ESMTP");
//居中
Dimension screen=Toolkit.getDefaultToolkit().getScreenSize();
Dimension frame=sm.getSize();
int newX=(screen.width-frame.width)/2;
int newY=(screen.height-frame.height)/2;
sm.setLocation(newX,newY);
sm.show();
//exit operation
//sm.addWindowListener(new WindowAdapter(){
//public void windowClosing(WindowEvent e){
//System.exit(0);
//}
//});
sm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -