可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I am trying to send an email with an attachment file in Java.
When I send the email without an attachment I receive the email, but when I add the attachment I don't receive anything and I don't get any error messages.
This is the code I am using:
public void send () throws AddressException, MessagingException{
//system properties
Properties props = new Properties();
props.put("mail.smtp.localhost", "localhost");
props.put("mail.smtp.host",Configurations.getInstance().email_serverIp);
/*
* create some properties and get the default Session
*/
session = Session.getDefaultInstance(props, null);
//session
Session session = Session.getInstance(props, null);
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("zouhaier.mhamdi@gmail.com"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("zouhaier.mhamdi@gmail.com"));
message.setSubject("Testing Subject");
message.setText("PFA");
MimeBodyPart messageBodyPart = new MimeBodyPart();
Multipart multipart = new MimeMultipart();
generateCsvFile("/tmp/test.csv");
messageBodyPart = new MimeBodyPart();
String file = "/tmp/test.csv";
String fileName = "test.csv";
DataSource source = new FileDataSource(file);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(fileName);
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart);
System.out.println("Sending");
Transport.send(message);
System.out.println("Done");
}
private static void generateCsvFile(String sFileName)
{
try
{
FileWriter writer = new FileWriter(sFileName);
writer.append("DisplayName");
writer.append(',');
writer.append("Age");
writer.append(',');
writer.append("YOUR NAME");
writer.append(',');
writer.append('\n');
writer.append("Zou");
writer.append(',');
writer.append("26");
writer.append(',');
writer.append("zouhaier");
//generate whatever data you want
writer.flush();
writer.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
How can I correct this?
回答1:
- Disable Your Anti Virus
because you have some warning like this
Try this code... It Help You....
public class SendMail {
public SendMail() throws MessagingException {
String host = "smtp.gmail.com";
String Password = "............";
String from = "XXXXXXXXXX@gmail.com";
String toAddress = "YYYYYYYYYYYYY@gmail.com";
String filename = "C:/SendAttachment.java";
// 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);
}
}
public static void main(String args[]){
try {
SendMail sm = new SendMail();
} catch (MessagingException ex) {
Logger.getLogger(SendMail.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
回答2:
See the JavaMail FAQ for debugging tips. In particular, the protocol trace will tell you more about what's going on in each case. While you're there you'll find tips for using GMail as well.
If the only difference is really just the addition of an attachment, it seems unlikely that it's an authentication problem. You may be getting an exception that you're not noticing since your send method is declared to throw MessagingException.
回答3:
You can try something like:
File f = new File(file);
MimeBodyPart attachmentPart = new MimeBodyPart();
attachmentPart.attachFile(f);
multipart.addBodyPart(attachmentPart);
See more details on: Send email via SMTP with attachment, plain/text, and text/hml
回答4:
You can access the gmail using the username and password. But access will be denied by gmail account.
So, you have to change the security level by going to account settings, password section and disbale the verification code security settings or lower your security level depends on the old or latest gmail application.
If you want to send the attachment through gmail by accessing the local directory, then you need to use the File object to be set to DataSource constructor class as directed in the program below. This will avoid "Access denied" exception.
import java.io.File;
import java.io.IOException;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class EmailApp {
public static void main(String[] args)throws IOException {
final String username = "mygmail@gmail.com";
final String password = "mypassword";
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("dharmendrasundar@gmail.com"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("dharmendrasundar@gmail.com"));
message.setSubject("Testing Subject");
message.setText("Dear Mail Crawler," + "\n\n No spam to my email, please!");
message.setSubject("Testing Subject");
message.setText("PFA");
MimeBodyPart messageBodyPart = new MimeBodyPart();
Multipart multipart = new MimeMultipart();
messageBodyPart = new MimeBodyPart();
String attachmentPath = "C:/TLS/logs/26-Mar-2015";
String attachmentName = "LogResults.txt";
File att = new File(new File(attachmentPath), attachmentName);
messageBodyPart.attachFile(att);
DataSource source = new FileDataSource(att);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(attachmentName);
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart);
System.out.println("Sending");
Transport.send(message);
Transport.send(message);
System.out.println("Done");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
回答5:
An email message consists of a header and body segment.
Header part will contain from, to and subject.
The body contains the attachments. To support carrying attachments in the body, type Multipart
should exists.
The Multipart
object holds multiple parts in which each part is represented as a type of BodyPart
whose subclass, MimeBodyPart
– can take a file as its content.
To add attachments into the mail body MimeBodyPart
class provides some convenient methods.
// JavaMail 1.3
MimeBodyPart attachPart = new MimeBodyPart();
String attachFile = "D:/test.pdf";
DataSource source = new FileDataSource(attachFile);
attachPart.setDataHandler(new DataHandler(source));
attachPart.setFileName(new File(attachFile).getName());
multipart.addBodyPart(attachPart);
// JavaMail 1.4
MimeBodyPart attachPart = new MimeBodyPart();
String attachFile = "D:/test.pdf";
attachPart.attachFile(attachFile);
multipart.addBodyPart(attachPart);
For more info refer this link.
https://www.tutorialspoint.com/javamail_api/javamail_api_send_email_with_attachment.htm