- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > 編程語(yǔ)言 >
- Java實(shí)戰之基于swing的QQ郵件收發(fā)功能實(shí)現
我們編寫(xiě)好文件填寫(xiě)好對方文件,點(diǎn)擊發(fā)送,這些電子郵件就發(fā)出去了
而這些電子郵件被稱(chēng)為MUA:Mail User Agent——郵件用戶(hù)代理。
Email不會(huì )直接到達對方的電腦,因為電腦不一定開(kāi)機,開(kāi)機不一定對方要取郵件,必須通過(guò)MUA從MDA把郵件取到自己的電腦上面。
有了上述概念,編寫(xiě)程序來(lái)收發(fā)和接受文件,本質(zhì)上就是:
1.編寫(xiě)MUA把郵件發(fā)送到MTA
2.編寫(xiě)MUA從MDA上收郵件
發(fā)郵件時(shí),MUA和MTA使用的協(xié)議就是SMTP:Simple Mail Transfer Protocol,后面的MTA到另一個(gè)MTA也是用SMTP協(xié)議。
收郵件的時(shí)候,MUA和MDA使用的協(xié)議有兩種:POP:Post Office Protocol,即POP3;IMAP:Internet Message Access Protocol
import com.sun.mail.util.MailSSLSocketFactory; import javax.swing.*; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Properties; /** * 郵件發(fā)送 * * @author ltl */ public class SendEmailManger extends Thread { private String mailAdr;//郵箱 private String content;//郵件的內容 private String subject;//郵件的題目 public SendEmailManger(String mailAdr, String subject, String content) { super(); this.mailAdr = mailAdr; this.subject = subject; this.content = content; } @Override public void run() { super.run(); try { sendMail(mailAdr, subject, content); } catch (Exception e) { e.printStackTrace(); } } private void sendMail(String mailAdr, String subject, String content) throws Exception { //加密的郵件套接字協(xié)議工廠(chǎng) MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); final Properties props = new Properties(); // 表示SMTP發(fā)送郵件,需要進(jìn)行身份驗證 props.put("mail.transport.protocol", "smtp"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.host", "smtp.qq.com"); // smtp登陸的賬號、密碼 ;需開(kāi)啟smtp登陸 props.setProperty("mail.debug", "true"); props.put("mail.user", "此處寫(xiě)你的qq郵箱"); props.put("mail.password", "此處寫(xiě)你的QQ授權碼"); // 特別需要注意,要將ssl協(xié)議設置為true,否則會(huì )報530錯誤 props.put("mail.smtp.ssl.enable", "true"); props.put("mail.smtp.ssl.socketFactory", sf); Authenticator authenticator = new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { // 用戶(hù)名、密碼 String userName = props.getProperty("mail.user"); String password = props.getProperty("mail.password"); return new PasswordAuthentication(userName, password); } }; // 使用環(huán)境屬性和授權信息,創(chuàng )建郵件會(huì )話(huà) Session mailSession = Session.getInstance(props, authenticator); // 創(chuàng )建郵件消息 MimeMessage message = new MimeMessage(mailSession); // 設置發(fā)件人 try { InternetAddress form = new InternetAddress(props.getProperty("mail.user")); message.setFrom(form); // 設置收件人 InternetAddress to = new InternetAddress(mailAdr); message.setRecipient(Message.RecipientType.TO, to); // 設置郵件標題 message.setSubject(subject); // 設置郵件的內容體 message.setContent(content, "text/html;charset=UTF-8"); // 發(fā)送郵件 Transport.send(message); } catch (MessagingException e) { e.printStackTrace(); } } public static void main(String[] args) { // 1. 創(chuàng )建一個(gè)頂層容器(窗口) JFrame jf = new JFrame("發(fā)送郵件"); jf.setSize(500, 500); jf.setLocationRelativeTo(null); jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 2. 創(chuàng )建中間容器(面板容器) JPanel panel = new JPanel(null); // 3. 創(chuàng )建一個(gè)基本組件(按鈕),并添加到 面板容器 中 JLabel jla1 = new JLabel("收件郵箱: "); jla1.setLocation(50,50); jla1.setSize(100, 50); jla1.setFont(new Font("123", 5, 20)); final JTextField textField = new JTextField(8); textField.setFont(new Font("mailAdr", Font.PLAIN, 20)); textField.setLocation(150,50); textField.setSize(250, 50); JLabel jla2 = new JLabel("郵件標題: "); jla2.setLocation(50,150); jla2.setSize(100, 50); jla2.setFont(new Font("123", 5, 20)); final JTextField textField1 = new JTextField(8); textField1.setFont(new Font("subject", Font.PLAIN, 20)); textField1.setLocation(150,150); textField1.setSize(250, 50); JLabel jla3 = new JLabel("郵件內容: "); jla3.setLocation(50,250); jla3.setSize(100, 50); jla3.setFont(new Font("123", 5, 20)); final JTextField textField3 = new JTextField(8); textField3.setFont(new Font("content", Font.PLAIN, 20)); textField3.setLocation(150,250); textField3.setSize(250, 50); JButton btn = new JButton("發(fā)送郵件"); btn.setLocation(50,350); btn.setSize(100, 50); btn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { SendEmailManger d = new SendEmailManger(textField.getText(), textField1.getText(), textField3.getText()); d.start(); } }); panel.add(jla1); panel.add(jla2); panel.add(jla3); panel.add(textField); panel.add(textField1); panel.add(textField3); panel.add(btn); // 4. 把 面板容器 作為窗口的內容面板 設置到 窗口 jf.setContentPane(panel); // 5. 顯示窗口,前面創(chuàng )建的信息都在內存中,通過(guò) jf.setVisible(true) 把內存中的窗口顯示在屏幕上。 jf.setVisible(true); } }
import com.sun.mail.util.MailSSLSocketFactory; import com.sun.org.apache.bcel.internal.generic.NEW; import javax.mail.*; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Date; import java.util.Properties; public class ReceiveEmailManger extends Thread { public static void main(String[] args){ // 1. 創(chuàng )建一個(gè)頂層容器(窗口) JFrame jf = new JFrame("接收郵件"); jf.setSize(500, 500); jf.setLocationRelativeTo(null); jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); JPanel panel = new JPanel(null); JLabel jla2 = new JLabel("標題: "); jla2.setLocation(50,50); jla2.setSize(150, 50); jla2.setFont(new Font("123", 5, 20)); final JTextField textField1 = new JTextField(8); textField1.setFont(new Font("subject", Font.PLAIN, 20)); textField1.setLocation(150,50); textField1.setSize(250, 50); JLabel jla3 = new JLabel("郵件內容: "); jla3.setLocation(50,150); jla3.setSize(150, 50); jla3.setFont(new Font("123", 5, 20)); final JTextField textField3 = new JTextField(8); textField3.setFont(new Font("content", Font.PLAIN, 20)); textField3.setLocation(150,150); textField3.setSize(250, 50); final JTextArea jta = new JTextArea(); jta.setLocation(150,150); jta.setSize(250, 200); jta.setFont(new Font("content", Font.PLAIN, 30)); JButton btn = new JButton("接收郵件"); btn.setLocation(150,380); btn.setSize(100, 50); btn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { ReceiveEmailManger re = new ReceiveEmailManger(); String [] mess = re.ReceiveEmailManger(); textField1.setText(mess[1]); jta.setText(mess[2]); }catch (Exception ea){ ea.printStackTrace(); } } }); panel.add(jla2); panel.add(jla3); panel.add(textField1); panel.add(btn); panel.add(jta); // 4. 把 面板容器 作為窗口的內容面板 設置到 窗口 jf.setContentPane(panel); // 5. 顯示窗口,前面創(chuàng )建的信息都在內存中,通過(guò) jf.setVisible(true) 把內存中的窗口顯示在屏幕上。 jf.setVisible(true); } public String[] ReceiveEmailManger() throws Exception { //加密的郵件套接字協(xié)議工廠(chǎng) MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); String pop3Server = "pop.qq.com"; String protocol = "pop3"; String username = "此處填寫(xiě)qq郵箱"; String password = "此處填寫(xiě)QQ授權碼"; Properties prop = new Properties(); prop.put("mail.store.protocol", protocol); prop.put("mail.pop3.host", pop3Server); // 特別需要注意,要將ssl協(xié)議設置為true,否則會(huì )報530錯誤 prop.put("mail.pop3.ssl.enable", "true"); prop.put("mail.pop3.ssl.socketFactory", sf); Session mailSession = Session.getDefaultInstance(prop,null); mailSession.setDebug(false); String [] mess = new String[3]; try { Store store = mailSession.getStore(protocol); //登錄驗證 store.connect(pop3Server,username,password); //獲得用戶(hù)的郵件賬戶(hù),注意通過(guò)pop3協(xié)議獲取某個(gè)郵件夾的名稱(chēng)只能為inbox Folder folder = store.getFolder("inbox"); //設置訪(fǎng)問(wèn)權限 folder.open(Folder.READ_ONLY); //獲取所有郵件 int size = folder.getMessageCount(); Message message = folder.getMessage(size); //獲取第一封發(fā)件人地址 String from = message.getFrom()[0].toString(); //獲取第一封郵件標題 String subject = message.getSubject(); //獲取第一封郵件內容 String conten = message.getContent().toString(); mess[0]=from; mess[1]=subject; mess[2]=conten; folder.close(false); store.close(); }catch(Exception e) { e.printStackTrace(); } return mess; } }
使用IDEA編程,在pom.xml文件下導入依賴(lài)包
<!-- java發(fā)送郵件jar包 --> <dependencies> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency> </dependencies>
到此這篇關(guān)于Java實(shí)戰之基于swing的QQ郵件收發(fā)功能實(shí)現的文章就介紹到這了,更多相關(guān)基于Java swing的QQ郵件收發(fā)功能實(shí)現內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系站長(cháng)郵箱:ts@56dr.com進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2