Я создаю контактную форму, которая позволяет пользователю вводить свою информацию, и электронное письмо будет отправлено на указанный адрес электронной почты. У меня возникли проблемы с получением параметров файла html и прикреплением его к компонентам электронной почты. Например, я хочу, чтобы в качестве темы электронного письма использовалось имя человека и сообщение, которое должно быть получено из сообщения контактной формы.
-Это мой Java-код
public class Main {
private static String USER_NAME = "cakesbyluckydemo";
private static String PASSWORD = "cakedemo";
private static String RECIPIENT = "[email protected]";
public static void main(String[] args) {
String from = USER_NAME;
String pass = PASSWORD;
String[] to = { RECIPIENT };
String subject = "Java send mail example";
String body = "Welcome to JavaMail!";
sendFromGMail(from, pass, to, subject, body);
}
private static void sendFromGMail(String from, String pass, String[] to, String subject, String body) {
Properties props = System.getProperties();
String host = "smtp.gmail.com";
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", pass);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props);
MimeMessage message = new MimeMessage(session);
try {
message.setFrom(new InternetAddress(from));
InternetAddress[] toAddress = new InternetAddress[to.length];
for( int i = 0; i < to.length; i++ ) {
toAddress[i] = new InternetAddress(to[i]);
}
for( int i = 0; i < toAddress.length; i++) {
message.addRecipient(Message.RecipientType.TO, toAddress[i]);
}
message.setSubject(subject);
message.setText(body);
Transport transport = session.getTransport("smtp");
transport.connect(host, from, pass);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
catch (AddressException ae) {
ae.printStackTrace();
}
catch (MessagingException me) {
me.printStackTrace();
}
}
}
-Это часть моего html-кода
<form>
<div class = "field">
<label class = "label">Name</label>
<div class = "control">
<input class = "input" type = "text" placeholder = "e.g Alex Smith">
</div>
</div>
<div class = "field">
<label class = "label">Email</label>
<div class = "control">
<input class = "input" type = "email" placeholder = "e.g. [email protected]">
</div>
</div>
<div class = "field">
<label class = "label">Message</label>
<div class = "control">
<textarea class = "textarea" placeholder = "Textarea"></textarea>
</div>
</div>
<div class = "field is-grouped">
<div class = "control">
<button class = "button is-link">Submit</button>
</div>
</div>
</form>




Вам нужен сервлет, который будет обрабатывать отправку формы. В сервлете вы можете получить значения формы и вызвать метод sendFromGMail.
Для отправки электронной почты из веб-приложения java вы можете использовать сервлет, чтобы вызвать форму ввода.
Давайте посмотрим на пример:
Ваша форма ввода html будет выглядеть так:
<!DOCTYPE html>
<html lang = "en">
<head>
<title>Email Example</title>
<meta charset = "utf-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1">
<link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<div class = "container">
<form action = "servlet/SendEmail" method = "post">
<div class = "col-sm-4"></div>
<div class = "container col-sm-6">
<div class = "form-group">
<label for = "name">Name: </label>
<input type = "text" class = "form-control" id = "name" placeholder = "Enter name" name = "name">
</div>
<div class = "form-group">
<label for = "email">Email:</label>
<input type = "email" class = "form-control" id = "email" placeholder = "Enter email" name = "email">
</div>
<div class = "form-group">
<label for = "message">Message Body:</label>
<label><textarea class = "form-control" rows = "5" cols = "100" placeholder = "Enter your message" name = "message"></textarea></label>
</div>
<button type = "submit" class = "btn btn-default">Submit</button>
</div>
</form>
</div>
</body>
</html>
Ваш класс java, который будет расширять класс сервлета, будет выглядеть так:
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
public class SendEmail extends HttpServlet {
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String name=request.getParameter("name");
String toEmails=request.getParameter("email");
String message=request.getParameter("message");
String subject = "Test email";
try{
System.out.println("Data: \n "+"Name: "+name+" email: "+toEmails+" message: "+message);
sendFromGMail("[email protected]", "yourPassword", toEmails, subject, message);
out.print("Message sent successfully");
}catch (Exception e2) {
System.out.println(e2);
out.print("Message cannot send! Check setting");
}
out.close();
}
public void sendFromGMail(final String from,final String password,String to,String sub,String msg){
//Get properties object
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");
//get Session
Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(from,password);
}
});
//compose message
try {
MimeMessage message = new MimeMessage(session);
message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
message.setSubject(sub);
message.setText(msg);
//send message
Transport.send(message);
System.out.println("message sent successfully");
} catch (MessagingException e) {throw new RuntimeException(e);}
}
}
И ваш файл web.xml будет:
<?xml version = "1.0" encoding = "UTF-8"?>
<web-app version = "2.5" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>SendEmail</servlet-name>
<servlet-class>com.notearena.emailwebapp.SendEmail</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SendEmail</servlet-name>
<url-pattern>/servlet/SendEmail</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
Здесь вы можете найти полный пример: https://github.com/Md-MamunAbdulKayum/Email-java-web-app-/tree/master