gpt4 book ai didi

java - 正确设计一个类,连接到 SMTP 服务器、验证并发送消息(使用 JavaMail API)

转载 作者:行者123 更新时间:2023-12-02 08:09:49 26 4
gpt4 key购买 nike

这是一个初学者问题。现在我的实现是这样的:

package org.minuteware.jgun;

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;

class EmailNotifier {
static Session connect(String host) {
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.from", "from@ex.com");
Session session = Session.getInstance(props, null);

return session;
}

static void send(String to, String subject, String body) {
try {
MimeMessage msg = new MimeMessage(connect("mail.ex.com"));
msg.setRecipients(Message.RecipientType.TO, to);
msg.setSubject(subject);
msg.setSentDate(new Date());
msg.setText(body);
Transport.send(msg);
} catch (MessagingException mex) {
System.out.println("send failed, exception: " + mex);
}
}
public static void main(String[] args) {
send("to@ex.com", "test subj", "test body");
}
}

我所坚持的是将主机参数传递给 send() 方法,以便它可以创建一个 session 。另一种选择可能是只有一个方法并将所有参数传递给它。但这是相当难看的。在 Python 中,我可以在类构造函数中创建连接,然后在类的所有其他方法中使用带有前缀 self 的连接。但我找不到 Java 的方法来做到这一点。

最佳答案

你的错误是你没有采用面向对象的方式,因为你创建了静态方法。假设您的类(class)的调用者应如下所示:

public static void main(String[] args) {
EmailNotifier en = new EmailNotifier("my.smtpserver", "sender@smtpserver");
en.send("to@ex.com", "test subj", "test body");
en.send("to@ex.com", "test subj", "test body");
en.send("to@ex.com", "test subj", "test body");
}

那么您的通知程序可能看起来与此类似:

class EmailNotifier {
private final Session session;

public EmailNotifier(final String host, final String sender) {
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.from", sender);
this.session = Session.getInstance(props, null);
}

public void send(String to, String subject, String body) {
try {
MimeMessage msg = new MimeMessage(this.session);
msg.setRecipients(Message.RecipientType.TO, to);
msg.setSubject(subject);
msg.setSentDate(new Date());
msg.setText(body);
Transport.send(msg);
} catch (MessagingException mex) {
System.out.println("send failed, exception: " + mex);
}
}
}

编辑:Apache commons 为 javax.mail 提供了一个很好的包装器,您可以找到 here .

关于java - 正确设计一个类,连接到 SMTP 服务器、验证并发送消息(使用 JavaMail API),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7638856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com