Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从多个电子邮件帐户发送JavaMail_Java_Gmail_Jakarta Mail - Fatal编程技术网

从多个电子邮件帐户发送JavaMail

从多个电子邮件帐户发送JavaMail,java,gmail,jakarta-mail,Java,Gmail,Jakarta Mail,我有一个程序,我有很多用户,每个人都可以从不同的电子邮件帐户发送电子邮件 当我尝试使用JavaMail发送电子邮件时。它们总是通过首先发送电子邮件的用户的帐户发送出去 user1 = new User("dummy-email@gmail.com", "dumpass12"); user2 = new User("second-dummy@gmail.com", "secondpass12"); user1.sendMail(toAddress, subject, body); user2.s

我有一个程序,我有很多用户,每个人都可以从不同的电子邮件帐户发送电子邮件

当我尝试使用JavaMail发送电子邮件时。它们总是通过首先发送电子邮件的用户的帐户发送出去

user1 = new User("dummy-email@gmail.com", "dumpass12");
user2 = new User("second-dummy@gmail.com", "secondpass12");

user1.sendMail(toAddress, subject, body);
user2.sendMail(toAddress, subject, body);
现在,当我这样做时,第二个用户将发送一条消息,但它将来自与user1相同的邮箱,即两条消息都来自dummy-email@gmail.com.

谁能给我解释一下为什么会这样?我是否必须以某种方式关闭连接?我如何发送这两封电子邮件并让它们来自不同的帐户?请帮帮我

这是我的代码,它实际发送电子邮件连接到用户的gmail帐户

public void sendMail(String toAddress, String subject, String body){     
    Properties props = new Properties();
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.socketFactory.port", "465");
    props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.port", "465");

    Session session = Session.getDefaultInstance(props,
        new javax.mail.Authenticator() 
        {
            protected PasswordAuthentication getPasswordAuthentication()
            { return new PasswordAuthentication(getUsername(),getPassword());   }
        });     

        try {
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(getUsername()));
            message.setRecipients(Message.RecipientType.TO, 
                InternetAddress.parse(toAddress));
            message.setSubject(subject);
            message.setContent(body, "text/html");

            Transport.send(message);


            } catch (MessagingException e) {
                throw new RuntimeException(e);
            }           
    }

将Session.getDefaultInstance替换为Session.getInstance。要了解原因,请仔细阅读这些方法的javadocs。

用Session.getInstance替换Session.getDefaultInstance。为了理解原因,仔细阅读这些方法的javadocs。

如果看不到相关代码getUsername和存储用户地址的成员定义,没有人能帮助你。如果看不到相关代码getUsername和存储用户地址的成员定义,没有人能帮助你。没有什么比让Bill Shannon回答更好的了您的JavaMail问题。嘿,比尔,为什么InternetHeader是最后一节课InternetHeader是final的,因为InternetHeader依赖于InternetHeader的实现细节,而且它只由InternetHeader类使用,这似乎是合理的。按照这种逻辑,不是所有的类都是final的吗?如果您打算允许子类化,那么拥有几个最终类会使事情变得非常困难……JavaMail并不依赖于所有类的实现细节。其中很多都是为子类化而设计的,没有什么比让Bill Shannon回答您的JavaMail问题更好的了。嘿,比尔,为什么InternetHeader是最后一节课InternetHeader是final的,因为InternetHeader依赖于InternetHeader的实现细节,而且它只由InternetHeader类使用,这似乎是合理的。按照这种逻辑,不是所有的类都是final的吗?如果您打算允许子类化,那么拥有几个最终类会使事情变得非常困难……JavaMail并不依赖于所有类的实现细节。其中许多是为子类化而设计的。