我需要从Tomcat中运行的servlet发送电子邮件。我总是会向同一个收件人发送相同的主题,但内容不同。
用Java发送电子邮件的简单方法是什么?
答案 0 :(得分:30)
这是我的代码:
import javax.mail.*;
import javax.mail.internet.*;
// Set up the SMTP server.
java.util.Properties props = new java.util.Properties();
props.put("mail.smtp.host", "smtp.myisp.com");
Session session = Session.getDefaultInstance(props, null);
// Construct the message
String to = "you@you.com";
String from = "me@me.com";
String subject = "Hello";
Message msg = new MimeMessage(session);
try {
msg.setFrom(new InternetAddress(from));
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
msg.setSubject(subject);
msg.setText("Hi,\n\nHow are you?");
// Send the message.
Transport.send(msg);
} catch (MessagingException e) {
// Error.
}
您可以在此处获取Sun的JavaMail库:http://java.sun.com/products/javamail/
答案 1 :(得分:23)
使用JavaMail可能有点痛苦。如果您想要一个更简单,更清晰的解决方案,那么请查看JavaMail的Spring包装器。参考文档在这里:
http://static.springframework.org/spring/docs/2.5.x/reference/mail.html
但是,这确实意味着你需要在你的应用程序中使用Spring,如果那不是一个选项那么你可以看看另一个开源包装器,如simple-java-mail:
或者,您可以直接使用JavaMail,但上述两种解决方案可以更简单,更清晰地用Java发送电子邮件。
答案 2 :(得分:18)
包装Java Mail API的另一个选项是Apache's commons-email。
SimpleEmail email = new SimpleEmail();
email.setHostName("mail.myserver.com");
email.addTo("jdoe@somewhere.org", "John Doe");
email.setFrom("me@apache.org", "Me");
email.setSubject("Test message");
email.setMsg("This is a simple test of commons-email");
email.send();
答案 3 :(得分:9)
要跟进jon的回复,以下是使用simple-java-mail发送邮件的示例。
这个想法是你不需要知道构成电子邮件的所有技术(嵌套)部分。从这个意义上来说,它很像Apache的commons-email,除了在处理附件和嵌入式图像时,Simple Java Mail比Apache的邮件API更简单。 Spring的邮件工具也可以使用,但在使用时有点笨拙(例如它需要一个匿名的内部类),当然你需要依赖Spring,它不仅仅是一个简单的邮件库,因为它是它的基础设计成为国际奥委会的解决方案。
Simple Java Mail btw是JavaMail API的包装器。
final Email email = new Email();
email.setFromAddress("lollypop", "lolly.pop@somemail.com");
email.setSubject("hey");
email.addRecipient("C. Cane", "candycane@candyshop.org", RecipientType.TO);
email.addRecipient("C. Bo", "chocobo@candyshop.org", RecipientType.BCC);
email.setText("We should meet up! ;)");
email.setTextHTML("<img src='cid:wink1'><b>We should meet up!</b><img src='cid:wink2'>");
// embed images and include downloadable attachments
email.addEmbeddedImage("wink1", imageByteArray, "image/png");
email.addEmbeddedImage("wink2", imageDatesource);
email.addAttachment("invitation", pdfByteArray, "application/pdf");
email.addAttachment("dresscode", odfDatasource);
new Mailer("smtp.host.com", 25, "username", "password").sendMail(email);
// or alternatively, pass in your own traditional MailSession object.
new Mailer(preconfiguredMailSession).sendMail(email);
答案 4 :(得分:5)
我通常在tomcat的server.xml文件的GlobalNamingResources部分定义我的javamail会话,这样我的代码就不依赖于配置参数了:
<GlobalNamingResources>
<Resource name="mail/Mail" auth="Container" type="javax.mail.Session"
mail.smtp.host="localhost"/>
...
</GlobalNamingResources>
我通过JNDI获得会话:
Context context = new InitialContext();
Session sess = (Session) context.lookup("java:comp/env/mail/Mail");
MimeMessage message = new MimeMessage(sess);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject(subject, "UTF-8");
message.setText(content, "UTF-8");
Transport.send(message);
答案 5 :(得分:3)
如果您可以依赖外部SMTP服务器,那么JavaMail非常棒。但是,如果您必须是自己的SMTP服务器,请查看Asprin。
答案 6 :(得分:1)
使用Java Mail库
import javax.mail.*
...
Session mSession = Session.getDefaultInstance(new Properties());
Transport mTransport = null;
mTransport = mSession.getTransport("smtp");
mTransport.connect(cServer, cUser, cPass);
MimeMessage mMessage = new MimeMessage(mSession);
mTransport.sendMessage(mMessage, mMessage.getAllRecipients());
mTransport.close();
这是我用来让应用程序发送电子邮件的代码的截断版本。显然,在发送之前将一个正文和收件人放在邮件中可能会更适合你。
maven存储库位置是artifactId:javax.mail,groupId:mail。
答案 7 :(得分:1)
如果java.mail jar是非maven项目,则将其添加到类路径中 将以下依赖项添加到pom.xml中执行代码
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4</version>
</dependency>
以下是经过测试的代码
import java.util.Date;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class MailSendingDemo {
static Properties properties = new Properties();
static {
properties.put("mail.smtp.host", "smtp.gmail.com");
properties.put("mail.smtp.port", "587");
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
}
public static void main(String[] args) {
String returnStatement = null;
try {
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("yourEmailId", "password");
}
};
Session session = Session.getInstance(properties, auth);
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("yourEmailId"));
message.setRecipient(Message.RecipientType.TO, new InternetAddress("recepeientMailId"));
message.setSentDate(new Date());
message.setSubject("Test Mail");
message.setText("Hi");
returnStatement = "The e-mail was sent successfully";
System.out.println(returnStatement);
Transport.send(message);
} catch (Exception e) {
returnStatement = "error in sending mail";
e.printStackTrace();
}
}
}
答案 8 :(得分:0)
经过测试的代码发送带有附件的邮件:
public class SendMailNotificationWithAttachment {
public static void mailToSendWithAttachment(String messageTosend, String snapShotFile) {
String to = Constants.MailTo;
String from = Constants.MailFrom;
String host = Constants.smtpHost;// or IP address
String subject = Constants.subject;
// Get the session object
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
message.setSubject(subject);
// message.setText(messageTosend);
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText(messageTosend);
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
String filepath = snapShotFile;
DataSource source = new FileDataSource(filepath);
messageBodyPart.setDataHandler(new DataHandler(source));
Path p = Paths.get(filepath);
String NameOffile = p.getFileName().toString();
messageBodyPart.setFileName(NameOffile);
multipart.addBodyPart(messageBodyPart);
// Send the complete message parts
message.setContent(multipart);
// Send message
Transport.send(message);
// Log.info("Message is sent Successfully");
// System.out.println("Message is sent Successfully");
System.out.println("Message is sent Successfully");
} catch (MessagingException e) {
// Log.error("Mail sending is Failed " + "due to" + e);
SendMailNotificationWithAttachment smnwa = new SendMailNotificationWithAttachment();
smnwa.mailSendFailed(e);
throw new RuntimeException(e);
}
}
public void mailSendFailed(MessagingException e) {
System.out.println("Mail sending is Failed " + "due to" + e);
Log log = new Log();
log.writeIntoLog("Mail sending is Failed " + "due to" + e.toString(), false);
}
}
答案 9 :(得分:-1)
这是简单的解决方案
下载这些罐子: 1. Javamail 2. smtp 3. Java.mail
从[http://javapapers.com/core-java/java-email/][1]
编辑收件人,用户名和密码(Gmail用户ID和密码)
答案 10 :(得分:-1)
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class sendMail {
static String alertByEmail(String emailMessage){
try{
final String fromEmail = "abc@gmail.com";
final String password = "********"; //fromEmail password
final String toEmail = "xyz@gmail.com";
System.out.println("Email configuration code start");
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com"); //SMTP Host set by default this
props.put("mail.smtp.port", "587"); //TLS Port you can use 465 insted of 587
props.put("mail.smtp.auth", "true"); //enable authentication
props.put("mail.smtp.starttls.enable", "true"); //enable STARTTLS
//create Authenticator object to pass in Session.getInstance argument
Authenticator auth = new Authenticator()
{
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(fromEmail, password);
}
};
Session session = Session.getInstance(props, auth);
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(fromEmail));
message.addRecipient(Message.RecipientType.TO, new
InternetAddress(toEmail));
message.setSubject("ALERT");
message.setText(emailMessage);//here you can write a msg what you want to send... just remove String parameter in alertByEmail method oherwise call parameter
System.out.println("text:"+emailMessage);
Transport.send(message);//here mail sending process start.
System.out.println("Mail Sent Successfully");
}
catch(Exception ex)
{
System.out.println("Mail fail");
System.out.println(ex);
}
return emailMessage;
}
public static void main(String[] args) {
String emailMessage = "This mail is send using java code.Report as a spam";
alertByEmail(emailMessage);
}
}
https://github.com/sumitfadale/java-important-codes/blob/main/Send%20a%20mail%20through%20java
enter code here