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