首页 > 编程语言 >java 发邮件(javax.mail)

java 发邮件(javax.mail)

时间:2023-09-18 12:35:59浏览次数:37  
标签:affix java String xxx new mail javax 邮件

package MailSendPkg; 


/*import ext.leetcode.easy.Seven;*/ 

import javax.mail.*; 

import javax.mail.internet.*; 

import java.util.*; 

import javax.activation.*; 


public class MailSender { 


    private String host = ""; // smtp服务器 

    private String from = ""; // 发件人地址 

    private String to = "";   // 收件人地址 

    private String affix = ""; // 附件地址 

    private String affixName = ""; // 附件名称 

    private String user = "";      // 用户名 

    private String pwd = "";       // 密码 

    private String subject = "";   // 邮件标题 


    public void setAddress(String from, String to, String subject) { 

        this.from = from; 

        this.to = to; 

        this.subject = subject; 

    } 


    public void setAffix(String affix, String affixName) { 

        this.affix = affix; 

        this.affixName = affixName; 

    } 


    public void send(String host, String user, String pwd) { 

        this.host = host; 

        this.user = user; 

        this.pwd = pwd; 


        Properties props = new Properties(); 


        // 设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器) 

        props.put("mail.smtp.host", host); 

        // 需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条) 

        props.put("mail.smtp.auth", "true"); 


        // 用刚刚设置好的props对象构建一个session 

        Session session = Session.getDefaultInstance(props); 


        // 有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使 

        // 用(你可以在控制台(console)上看到发送邮件的过程) 

        session.setDebug(true); 


        // 用session为参数定义消息对象 


        MimeMessage message = new MimeMessage(session); 

        try { 

            // 加载发件人地址 

            message.setFrom(new InternetAddress(from)); 

            // 加载收件人地址 

            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 

            // 加载标题 

            message.setSubject(subject); 


            // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件 

            Multipart multipart = new MimeMultipart(); 


            // 设置邮件的文本内容 

            BodyPart contentPart = new MimeBodyPart(); 

            contentPart.setText("邮件的具体内容在此,/n/r"); 

            multipart.addBodyPart(contentPart); 


            contentPart.setText("邮件的具体内容在此2,/n/r"); 

            multipart.addBodyPart(contentPart); 


            contentPart.setText("邮件的具体内容在此3/n/r"); 

            multipart.addBodyPart(contentPart); 


            // 添加附件 

            BodyPart messageBodyPart = new MimeBodyPart(); 

            DataSource source = new FileDataSource(affix); 

            // 添加附件的内容 

            messageBodyPart.setDataHandler(new DataHandler(source)); 

            // 添加附件的标题 

            // 这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码 


            sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder(); 

            messageBodyPart.setFileName("=?GBK?B?" + enc.encode(affixName.getBytes()) + "?="); 

            multipart.addBodyPart(messageBodyPart); 


            // 将multipart对象放到message中 

            message.setContent(multipart); 

            // 保存邮件 

            message.saveChanges(); 

            // 发送邮件 

            Transport transport = session.getTransport("smtp"); 

            // 连接服务器的邮箱 

            transport.connect(host, user, pwd); 

            // 把邮件发送出去 

            transport.sendMessage(message, message.getAllRecipients()); 

            transport.close(); 

        } catch (Exception e) { 

            e.printStackTrace(); 

        } 

    } 


    public static void main(String[] args) { 

        String mail_to_addr; 

        String affix_name; 

        mail_to_addr = ""; 

        affix_name = ""; 

        if (args.length >= 2) { 

            mail_to_addr = args[0].toString(); 

            affix_name = args[1].toString(); 

            MailSender cn = new MailSender(); 

            // 设置发件人地址、收件人地址和邮件标题 

            // cn.setAddress("[email protected]","[email protected]","我是 用JAVA发送的测试邮件"); 

            cn.setAddress("[email protected]",, mail_to_addr, "我是 用JAVA发送的测试邮件"); 

            // 设置要发送附件的位置和标题 

            //cn.setAffix("d:/a.doc", "我是附件.doc"); 

            cn.setAffix(affix_name, "我是附件.doc"); 

            // 设置smtp服务器以及邮箱的帐号和密码 

            try { 

                cn.send("xxx.xxx.com.cn", "xxxxx", "xxxxx"); 

            } catch (Exception e) { 

            } 

        } 

    }

标签:affix,java,String,xxx,new,mail,javax,邮件
From: https://blog.51cto.com/u_8215601/7508984

相关文章

  • Java(day17):Java 的循环退出语句 break、continue
    在Java中,循环是一种重要的控制流结构,它允许程序重复执行某段代码,直到满足特定的条件为止。但在某些情况下,我们可能需要在循环中提前退出或跳过某些迭代。这时我们可以使用Java中的两个循环控制语句:break和continue。break语句break语句用于完全退出当前所在的循环,不再执行循环中......
  • 基于javaweb远程教育网站开发与实现-计算机毕业设计源码+LW文档
    一、课题简介本课题将设计并实现一个基于JAVAWEB远程教育网站,根据课题的需求制定技术开发方案,可分别实现管理员与普通用户的注册、登录功能,可以实现客户端C++编程语言课程视频选取播放、学习进度记录、问答咨询论坛、在线测试等功能,实现服务端相关数据表的增删改查功能以及学生注......
  • java获取前一天日期
     java获取前一天日期 importjava.util.Calendar;publicclassMain{publicstaticvoidmain(String[]args){//获取今天的日期Calendartoday=Calendar.getInstance();//将今天的日期设置为前一天Calendaryesterday=Calendar.getInstan......
  • java大文件上传,大文件下载解决方案
    一.大文件上传解决方案:普通的Servlet文件上传:使用JavaServlet技术,通过表单提交文件,然后在服务器端使用流将文件写入磁盘。这适用于小文件,但不太适合大文件,因为需要将整个文件加载到内存中。ApacheCommonsFileUpload:这是一个常用的开源库,用于处理文件上传。它支持流式处理文......
  • 全网最详细Java-JUC
    Java-JUC⓪基础❶进程&线程进程:指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间。线程:比进程更小的执行单位,一个进程可以启动多个线程,每条线程并行执行不同的任务。❷并行&并发并行(Parallel):在同一时刻,有多个指令在多个CPU上同时执行。并发(Concurrent):在......
  • JAVA从小白到微服务学习路线
    JAVA基础教程开发环境搭建JAVA基础语法数据类型流程控制数组面向对象方法重载封装继承多态抽象类接口枚举常用类泛型集合泛型注解异常处理多线程IO流反射StreamAPILambda表达式计算机基础数据结构与算法数据结构与算法基础(青岛大学-王卓)数......
  • Java实现接口
    声明:本文记录基于JDK8(8u211)的继承使用规则如果存在错误,请发邮件至[email protected]联系我创作时间:2023-09-1511:00:21创作情况:失业第45天,地处成都金牛区创作者:一口吃不成胖子接口就是一种规范,对实现他的类进行限制,它本身并不实现任何方法,接口中不能声明具体实现的方......
  • Java注解
    声明:本文记录基于JDK8(8u211)的注解使用规则,若存在错误,请发邮件至[email protected]联系我创作时间:2023-09-1510:07:01创作情况:失业第45天,地处成都金牛区创作者:一口吃不成胖子格式如下@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public@interfac......
  • java特殊的值传递
    java中的参数传递是一种特殊的值传递,又叫共享传递java中虽然可以改变原始对象的属性,但是并没有改变原始对象。因为当你改变实参指向的地址,形参指向的地址并不会随着变化但你通过实参去修改对象时,是根据形参传给实参的地址去修改如果实参地址变化,会影响形参才是引用传递......
  • JavaScript中的浅拷贝与深拷贝
    前言JavaScript中的浅拷贝和深拷贝是非常重要的概念,它们在处理对象和数组时具有不同的作用。在编程中,经常需要复制数据以便进行各种操作,但必须注意拷贝的方式,以确保得到预期的结果。浅拷贝是创建一个新对象或数组,并将原始对象或数组的引用复制给它。这意味着新对象和原始对象将......