Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.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
发送电子邮件解决Java教程问题_Java_Properties_Jakarta Mail - Fatal编程技术网

发送电子邮件解决Java教程问题

发送电子邮件解决Java教程问题,java,properties,jakarta-mail,Java,Properties,Jakarta Mail,我将使用java发送电子邮件 我需要知道它在代码中的什么地方使用了属性文件的属性。如示例所示?那么,在准则中它是在哪里被裁判的呢 注: 还有,如果我要使用Google SMTP,我应该在属性文件中替换哪些值 第一次加载类时,将执行类中的代码 static { fetchConfig(); } 您将看到它调用fetchConfig方法,然后加载fMailServerConfig属性 private static Properties fMailServerConfig = new Prop

我将使用java发送电子邮件

我需要知道它在代码中的什么地方使用了属性文件的属性。如示例所示?那么,在准则中它是在哪里被裁判的呢

注: 还有,如果我要使用Google SMTP,我应该在属性文件中替换哪些值


第一次加载类时,将执行类中的代码

static {
   fetchConfig();
}
您将看到它调用fetchConfig方法,然后加载fMailServerConfig属性

private static Properties fMailServerConfig = new Properties();

private static void fetchConfig() {
   // ...[omitted stuff]...
   input = new FileInputStream( "C:\\Temp\\MyMailServer.txt" );
   fMailServerConfig.load( input );
   // ...[omitted stuff]...
}
请注意,fetchConfig方法是静态的——它是从静态初始值设定项调用的,因此它需要是静态的,因为实际上还没有类的实例。此外,我们可能会对所有实例使用相同的配置,因此不需要每个实例都有自己的配置

还要注意,该方法是私有的,因为我们不希望从其他任何地方调用该方法

javax.mail包将知道要使用哪些属性。i、 e.,mail.host,mail.from等

关于使用Google Gmail进行SMTP的说明

出于安全考虑,使用谷歌的SMTP服务器可能会有点棘手。谷歌怎么知道你不仅仅是一个利用它们作为中继的垃圾邮件发送者?您可能必须首先与他们进行身份验证——他们有您可以阅读和使用的证书,但这超出了vanilla javax.mail的范围

打开一个FileInputStream,将数据加载到fMailServerConfig中,fMailServerConfig定义为:

  private static Properties fMailServerConfig = new Properties();
properties类负责读取此文件。它使用以下代码生成一条消息:

  Session session = Session.getDefaultInstance( fMailServerConfig, null );
  MimeMessage message = new MimeMessage( session );
至于财产的具体情况,我不能说目的是什么。也许为该示例提供了更多代码。属性是Java framework类吗?

在fetchConfig中调整此行以加载设置:

input = new FileInputStream( "C:\\Temp\\MyMailServer.txt" );
阅读下面的第二个问题

以下几点对我很有用:

mail.transport.protocol   = smtps
mail.smtp.starttls.enable = true
mail.smtps.port           = 465
mail.smtps.host           = smtp.gmail.com
mail.smtps.auth           = true

您可以在没有属性文件的情况下使用它。我下面的代码工作完美。使用它

只需调用此函数即可向客户端发送自动电子邮件。 In参数to是您要向其发送电子邮件的电子邮件地址

我通常在Maven项目中这样做。如果您使用的是maven project,则导入以下依赖项

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>

让我们看看你在尝试什么。不要只提供到源代码的链接。反正代码是一样的,我会发布它。根据教程作者的说法,我们只需要将j2ee.jar添加到类路径中,其他一切都应该可以工作:在本例中,作者使用了一个TXT文件来存储发送邮件所需的属性。但是,我需要为此使用属性文件。我该怎么做?是什么让你认为你需要一个.property文件?属性是从.txt文件中读取的。是的,它是从txt文件中读取的,但我要求它是从属性文件中读取的。只需将文件重命名为.properties并将读取它的行更改为读取新文件。此.txt文件的格式与.properties文件的格式相同。您可以使用Netbeans来维护它。如果您的gmail帐户上启用了双向身份验证,这会起作用吗?
mail.transport.protocol   = smtps
mail.smtp.starttls.enable = true
mail.smtps.port           = 465
mail.smtps.host           = smtp.gmail.com
mail.smtps.auth           = true
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>
private void sendMail(String to, String subject, String emailBody) throws MessagingException{
    final String username = "youremail@gmail.com";
    final String password = "emailPassword";

    Properties props = new Properties();
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.port", "587");

    Session session = Session.getInstance(props,
            new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(username, password);
        }
    });

    try {

        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress("shubham20.yeole@gmail.com"));
        message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse(to));
        message.setSubject(subject);
        message.setContent(emailBody, "text/html; charset=utf-8");

        Transport.send(message);

        System.out.println("Done");

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