有一个 JSP 页面,其中有一个按钮,单击该按钮我想使用 JSP 将文件附加到邮件中而不发送它?
我在单击该按钮时使用mailto标签,因此我可以登录到 gmail,并且我可以在邮件中传递主题,但我不知道如何使用 jsp 或 java 在其中附加任何文件?
如果有人知道,那该怎么做,请告诉我。
//Mail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@include file="Database.jsp" %>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.ResultSet"%>
<html>
<head>
</head>
<body>
<form id="form1" class="blocks" action="AttachMail.jsp" method="post" enctype="multipart/form-data">
<table width="500px" border="0">
<tr>
<td style="color:#BAA111" align="center"><h4><b>File Upload</b></h4></td>
</tr>
<tr>
<td style="width:200px;">
<hr style="width:410px" align="left"></hr>
</td>
</tr>
</table><br>
<p>
<label>First Name:</label>
<input type="text" name="fname" class="text"/>
</p>
<p>
<label>Last Name:</label>
<input type="text" name="lname" class="text"/>
</p>
<p>
<label>Email ID:</label>
<input type="text" name="email" class="text"/>
</p>
<p>
<label>Upload File:</label>
<input type="file" name="file" class="file"/>
</p>
<p><br>
<label> </label>
<input type="submit" class="btn" value="Submit"/>
<label style="width:10px"></label>
<input type="reset" class="btn" value="Reset"/>
</p>
</form>
</body>
</html>
//AttachMail.jsp
<%@ page import="java.util.*,java.io.*,javax.mail.*,javax.mail.internet.*,javax.activation.*,org.apache.commons.fileupload.*,org.apache.commons.fileupload.servlet.*,org.apache.commons.fileupload.disk.*,org.apache.commons.fileupload.util.*" %>
<html>
<body>
<%
String subject="Sending Mail with Attachment and Form data";//This is fixed subject, you may get from "form" also
String body="";
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iter = upload.getItemIterator(request);
FileItemStream item = null;
String fname = null; //you may write different names also
String lname = null; // or put in default value
String email = null; // for these fields
String file = null;
InputStream stream = null;
//out.print("mulipart request received<br/>");
while (iter.hasNext()) {
item = iter.next();
String fdname = item.getFieldName();
stream = item.openStream();
if (item.isFormField()) {
String fieldValue = Streams.asString(stream);
//out.print("Form field " + name + " with value " + fieldValue + "<br/>");
if ("fname".equals(fdname)){
body ="First Name : "+ fieldValue+"\n";
}
if ("lname".equals(fdname)){
body =body+"Last Name : "+ fieldValue+"\n";
}
if ("email".equals(fdname)){
email=fieldValue;
body =body+"Email Id : "+ fieldValue+"\n";
}
}
else {
fdname = item.getName();
if (fdname != null && !"".equals(fdname.trim()))
{
file = new File(item.getName()).getName();
FileDataSource fds = new FileDataSource(file);
try{
Properties props = new Properties(); //we could enter properties later
props.put("mail.smtp.auth", "true");
Session s = Session.getInstance(props, null);
MimeMessage msg = new MimeMessage(s);
msg.setFrom(new InternetAddress(email));
msg.addRecipient(Message.RecipientType.TO,new InternetAddress("To mail address"));//or you can pass from form also
msg.setSubject(subject);
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setText(body);
MimeBodyPart mbp2 = new MimeBodyPart();
mbp2.setDataHandler(new DataHandler(fds));
mbp2.setFileName(fds.getName());
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp1);
mp.addBodyPart(mbp2);
msg.setContent(mp);
msg.saveChanges();
Transport transport=s.getTransport("smtp");
transport.connect("smtp domain name","email address","password");
transport.sendMessage(msg,msg.getAllRecipients());
transport.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
else
out.print("File or necessary fields were not sent !<br/>");
}
}
} else
out.print("request was not multipart");
%>
</body>
</html>
//jar files to add "mail.jar, naming-factory-4.1.31.jar, org.apache.commons.fileuplod.jar"
不,您不能使用 mailto 向邮件添加附件。
mailto:仅支持标题值或文本/纯内容。
public class SendMail {
public SendMail() throws MessagingException {
String host = "smtp.gmail.com";
String Password = "mnmnn";
String from = "xyz@gmail.com";
String toAddress = "abc@gmail.com";
String filename = "C:/Users/hp/Desktop/Write.txt";
// Get system properties
Properties props = System.getProperties();
props.put("mail.smtp.host", host);
props.put("mail.smtps.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
Session session = Session.getInstance(props, null);
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO, toAddress);
message.setSubject("JavaMail Attachment");
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("Here's the file");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart);
try {
Transport tr = session.getTransport("smtps");
tr.connect(host, from, Password);
tr.sendMessage(message, message.getAllRecipients());
System.out.println("Mail Sent Successfully");
tr.close();
} catch (SendFailedException sfe) {
System.out.println(sfe);
}
}
}
注意:使用 JavaMail API。