⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 javamailframe.java

📁 使用JavaMail开发的具有发送、接收邮件的应用
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        public PasswordAuthentication getPasswordAuthentication() {            return new PasswordAuthentication(account.userName, account.passWord);        }    }private void btnSendActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSendActionPerformed// TODO add your handling code here:    if (waitDlg == null) {        waitDlg = new WaitingWindow(this);    }    Thread sendThread = new Thread(new Runnable() {        @Override        public void run() {            JavaMailFrame.this.setEnabled(false);            boolean success;            Properties props = new Properties();// fill props with any information            Session session;            try {                if (account.host.contains("smtp")) {                    // Setup mail server                    props.put("mail.smtp.host", account.host);                    props.put("mail.smtp.auth", "true");   //SMTP服务用户认证。虽然foxmail配置中没有显示需要身份验证,实际上都加了authentication                    Authenticator auth = new MyAuthenticator();                    session = Session.getInstance(props, auth);                } else {                    props.put("mail.smtp.host", getMxServer());                    props.put("mail.smtp.port", "25");                    props.put("mail.smtp.auth", "f");                    session = Session.getInstance(props, null);                }                success = sendMessage(session);                JavaMailFrame.this.setEnabled(true);                waitDlg.setVisible(false);                if (success) {                    JOptionPane.showMessageDialog(JavaMailFrame.this, "发送成功!");                } else {                    JOptionPane.showMessageDialog(JavaMailFrame.this, "发送失败!", "错误", JOptionPane.ERROR_MESSAGE);                }            } catch (Exception ex) {                JavaMailFrame.this.setEnabled(true);                waitDlg.setVisible(false);                JOptionPane.showMessageDialog(JavaMailFrame.this, "发送失败!" + ex.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);//                Logger.getLogger(JavaMailFrame.class.getName()).log(Level.SEVERE, null, ex);            }        }    });    sendThread.start();    waitDlg.setVisible(true);}//GEN-LAST:event_btnSendActionPerformed    private String getMxServer() throws Exception {        // DNS服务器,如果需要的话手工设置一下。        String dns = "dns://";        //得到接受方的服务器域名        String strTo = txtTo.getText();        if (strTo.isEmpty()) {            throw new Exception("收件人不能为空");        } else if (strTo.contains(";")) {            throw new Exception("只能发给一个收件人");        }        String domain = strTo.substring(strTo.indexOf('@') + 1);        Hashtable env = new Hashtable();        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory");        env.put(Context.PROVIDER_URL, dns);        DirContext ctx = new InitialDirContext(env);        Attributes attrs = ctx.getAttributes(domain, new String[]{"MX"});        if (attrs == null || attrs.size() <= 0) {            throw new java.lang.IllegalStateException("错误:你的DNS服务器没有相应的MX记录!");        }        NamingEnumeration servers = attrs.getAll();        // 列出所有邮件服务器:        String smtpHost = null;        if (servers.hasMore()) {            smtpHost = (String) ((Attribute) servers.next()).get(0);            smtpHost = smtpHost.substring(smtpHost.lastIndexOf(' ') + 1);        }        return smtpHost;    }    private boolean sendMessage(Session session) throws MessagingException, UnsupportedEncodingException {        int i,  nCount;        boolean success = false;        // Define message        MimeMessage message = new MimeMessage(session);        message.setFrom(new InternetAddress(account.from));  //发送人        String[] recipients = txtTo.getText().split(";");        nCount = recipients.length;        InternetAddress[] recAddrs = new InternetAddress[nCount];        for (i = 0; i < nCount; i++) {            recAddrs[i] = new InternetAddress(recipients[i]);        }        message.addRecipients(Message.RecipientType.TO, recAddrs);//收件人        if (!txtCC.getText().isEmpty()) {            recipients = txtCC.getText().split(";");            nCount = recipients.length;            recAddrs = new InternetAddress[nCount];            for (i = 0; i < nCount; i++) {                recAddrs[i] = new InternetAddress(recipients[i]);            }            message.addRecipients(Message.RecipientType.CC, recAddrs);//抄送人        }        message.setSubject(txtSubject.getText()); //标题,自动对非US-ASCII编码        message.setHeader("X-Mailer", "JavaMail");  //不加此句的话某些smtp服务器(如tom.com)认为是垃圾邮件,拒发。“553 this mail is blocked by kbas”        message.setSentDate(new Date()); //发送日期        if (listModel.size() > 0) {  //has attachment            Multipart multiPart = new MimeMultipart();            BodyPart messageBodyPart = new MimeBodyPart();            messageBodyPart.setText(txtContent.getText());            multiPart.addBodyPart(messageBodyPart);            Enumeration<Attachment> attaches = (Enumeration<Attachment>) listModel.elements();            while (attaches.hasMoreElements()) {                Attachment attach = attaches.nextElement();                messageBodyPart = new MimeBodyPart();                messageBodyPart.setDataHandler(new DataHandler(attach.dataSrc));                messageBodyPart.setFileName(MimeUtility.encodeText(attach.fileName));                multiPart.addBodyPart(messageBodyPart);            }            message.setContent(multiPart);        } else {            message.setText(txtContent.getText());  //若统一看作multipart的话,当没有附件时也可能会出现“回形针”        // Send message        }        session.setDebug(true);        nCount = 3;        while (nCount > 0 && !success) {            try {                Transport.send(message);                success = true;            } catch (Exception ex) {            }            nCount--;        }        return success;    }private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddActionPerformed// TODO add your handling code here:    JFileChooser chooser = new JFileChooser();    chooser.setCurrentDirectory(new File(currentPath));    chooser.setMultiSelectionEnabled(true);    int ret = chooser.showOpenDialog(this);    if (ret == JFileChooser.APPROVE_OPTION) {        currentPath = chooser.getSelectedFile().getPath();        File[] files = chooser.getSelectedFiles();        for (File file : files) {            String fileName = file.getName();            FileDataSource dataSrc = new FileDataSource(file.getPath());            Attachment attach = new Attachment(fileName, dataSrc);            listModel.addElement(attach);        }    }}//GEN-LAST:event_btnAddActionPerformedprivate void btnDelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnDelActionPerformed// TODO add your handling code here:    int[] sels = lstAttach.getSelectedIndices();    int i,  nCount = sels.length;    if (nCount >= 0) {        for (i = nCount - 1; i >= 0; i--) {            listModel.remove(sels[i]);        }    }}//GEN-LAST:event_btnDelActionPerformed    // Variables declaration - do not modify//GEN-BEGIN:variables    private javax.swing.JButton btnAdd;    private javax.swing.JButton btnDel;    private javax.swing.JButton btnSend;    private javax.swing.JButton jButton1;    private javax.swing.JLabel jLabel1;    private javax.swing.JLabel jLabel2;    private javax.swing.JLabel jLabel3;    private javax.swing.JPanel jPanel1;    private javax.swing.JPanel jPanel2;    private javax.swing.JScrollPane jScrollPane1;    private javax.swing.JScrollPane jScrollPane2;    private javax.swing.JList lstAttach;    private javax.swing.JTextField txtCC;    private javax.swing.JTextArea txtContent;    private javax.swing.JTextField txtSubject;    private javax.swing.JTextField txtTo;    // End of variables declaration//GEN-END:variables}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -