gpt4 book ai didi

android - 尝试在没有用户交互的情况下发送邮件 : java. lang.NoClassDefFoundError : javax. activation.DataHandler

转载 作者:行者123 更新时间:2023-11-30 03:41:40 29 4
gpt4 key购买 nike

我正在尝试在没有用户交互的情况下发送邮件。我创建了以下类:

import java.util.Calendar;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMultipart;

public class MailService {
// public static final String MAIL_SERVER = "localhost";

private String toList;
private String ccList;
private String bccList;
private String subject;
final private static String SMTP_SERVER = "smtp.gmail.com";
final private static String SMTP_TLSENABLE = "true";
final private static String SMTP_AUTH = "true";
final private static String SMTP_PORT = "587";
final private static String SMTP_USERNAME = "mymail@gmail.com";
final private static String SMTP_PASSWORD = "Password";


private String from;
private String txtBody;
private String htmlBody;
private String replyToList;
private boolean authenticationRequired = false;

public MailService(String from, String toList, String subject, String txtBody, String htmlBody) {
this.txtBody = txtBody;
this.htmlBody = htmlBody;
this.subject = subject;
this.from = from;
this.toList = toList;
this.ccList = null;
this.bccList = null;
this.replyToList = null;
this.authenticationRequired = true;

}


public void sendAuthenticated() throws AddressException, MessagingException {
authenticationRequired = true;
send();
}

/**
* Send an e-mail
*
* @throws MessagingException
* @throws AddressException
*/
public void send() throws AddressException, MessagingException {
Properties props = new Properties();

// set the host smtp address
props.put("mail.smtp.host", SMTP_SERVER);
props.put("mail.user", from);

props.put("mail.smtp.starttls.enable", SMTP_TLSENABLE); // needed for gmail
props.put("mail.smtp.auth", SMTP_AUTH); // needed for gmail
props.put("mail.smtp.port", SMTP_PORT); // gmail smtp port

/*Authenticator auth = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("mobile@mydomain.com", "mypassword");
}
};*/


Session session;

if (authenticationRequired) {
Authenticator auth = new SMTPAuthenticator();
props.put("mail.smtp.auth", SMTP_AUTH);
session = Session.getDefaultInstance(props, auth);
} else {
session = Session.getDefaultInstance(props, null);
}

// get the default session
session.setDebug(true);

// create message
Message msg = new javax.mail.internet.MimeMessage(session);

// set from and to address
try {
msg.setFrom(new InternetAddress(from, from));
msg.setReplyTo(new InternetAddress[]{new InternetAddress(from,from)});
} catch (Exception e) {
msg.setFrom(new InternetAddress(from));
msg.setReplyTo(new InternetAddress[]{new InternetAddress(from)});
}

// set send date
msg.setSentDate(Calendar.getInstance().getTime());

// parse the recipients TO address
java.util.StringTokenizer st = new java.util.StringTokenizer(toList, ",");
int numberOfRecipients = st.countTokens();

javax.mail.internet.InternetAddress[] addressTo = new javax.mail.internet.InternetAddress[numberOfRecipients];

int i = 0;
while (st.hasMoreTokens()) {
addressTo[i++] = new javax.mail.internet.InternetAddress(st
.nextToken());
}
msg.setRecipients(javax.mail.Message.RecipientType.TO, addressTo);

// parse the replyTo addresses
if (replyToList != null && !"".equals(replyToList)) {
st = new java.util.StringTokenizer(replyToList, ",");
int numberOfReplyTos = st.countTokens();
javax.mail.internet.InternetAddress[] addressReplyTo = new javax.mail.internet.InternetAddress[numberOfReplyTos];
i = 0;
while (st.hasMoreTokens()) {
addressReplyTo[i++] = new javax.mail.internet.InternetAddress(
st.nextToken());
}
msg.setReplyTo(addressReplyTo);
}

// parse the recipients CC address
if (ccList != null && !"".equals(ccList)) {
st = new java.util.StringTokenizer(ccList, ",");
int numberOfCCRecipients = st.countTokens();

javax.mail.internet.InternetAddress[] addressCC = new javax.mail.internet.InternetAddress[numberOfCCRecipients];

i = 0;
while (st.hasMoreTokens()) {
addressCC[i++] = new javax.mail.internet.InternetAddress(st
.nextToken());
}

msg.setRecipients(javax.mail.Message.RecipientType.CC, addressCC);
}

// parse the recipients BCC address
if (bccList != null && !"".equals(bccList)) {
st = new java.util.StringTokenizer(bccList, ",");
int numberOfBCCRecipients = st.countTokens();

javax.mail.internet.InternetAddress[] addressBCC = new javax.mail.internet.InternetAddress[numberOfBCCRecipients];

i = 0;
while (st.hasMoreTokens()) {
addressBCC[i++] = new javax.mail.internet.InternetAddress(st
.nextToken());
}

msg.setRecipients(javax.mail.Message.RecipientType.BCC, addressBCC);
}

// set header
msg.addHeader("X-Mailer", "MyMailer");
msg.addHeader("Precedence", "bulk");
// setting the subject and content type
msg.setSubject(subject);

Multipart mp = new MimeMultipart("related");

// set body message
MimeBodyPart bodyMsg = new MimeBodyPart();
bodyMsg.setText(txtBody, "iso-8859-1"); *THIS IS THE ERROR LINE*
bodyMsg.setContent(htmlBody, "text/html");
mp.addBodyPart(bodyMsg);
msg.setContent(mp);

// send it
try {
javax.mail.Transport.send(msg);
} catch (Exception e) {
e.printStackTrace();
}

}

/**
* SimpleAuthenticator is used to do simple authentication when the SMTP
* server requires it.
*/
private static class SMTPAuthenticator extends javax.mail.Authenticator {

@Override
protected PasswordAuthentication getPasswordAuthentication() {

String username = SMTP_USERNAME;
String password = SMTP_PASSWORD;

return new PasswordAuthentication(username, password);
}
}

public String getToList() {
return toList;
}

public void setToList(String toList) {
this.toList = toList;
}

public String getCcList() {
return ccList;
}

public void setCcList(String ccList) {
this.ccList = ccList;
}

public String getBccList() {
return bccList;
}

public void setBccList(String bccList) {
this.bccList = bccList;
}

public String getSubject() {
return subject;
}

public void setSubject(String subject) {
this.subject = subject;
}

public void setFrom(String from) {
this.from = from;
}

public void setTxtBody(String body) {
this.txtBody = body;
}

public void setHtmlBody(String body) {
this.htmlBody = body;
}

public String getReplyToList() {
return replyToList;
}

public void setReplyToList(String replyToList) {
this.replyToList = replyToList;
}

public boolean isAuthenticationRequired() {
return authenticationRequired;
}

public void setAuthenticationRequired(boolean authenticationRequired) {
this.authenticationRequired = authenticationRequired;
}

}

我下载了 JavaMail http://www.oracle.com/technetwork/java/javamail/index-138643.html和 Activation.jar:http://www.oracle.com/technetwork/java/jaf11-139815.html#download

将 mail.jar 和 activation.jar 添加到 lib 文件夹。

但是一旦我在 Activity 中调用以下内容:

MailService mailer = new MailService("somemail@somemail.com","somemail@somemail.com","Subject","TextBody", "<b>HtmlBody</b>");
try {
mailer.sendAuthenticated();
} catch (Exception e) {
Log.e("MAIL", "Failed sending email.", e);
}

我收到以下错误:

03-25 09:18:37.999: E/dalvikvm(12922): Could not find class 'javax.activation.DataHandler', referenced from method javax.mail.internet.MimeBodyPart.updateHeaders
03-25 09:18:37.999: W/dalvikvm(12922): VFY: unable to resolve new-instance 1138 (Ljavax/activation/DataHandler;) in Ljavax/mail/internet/MimeBodyPart;
03-25 09:18:37.999: D/AndroidRuntime(12922): Shutting down VM
03-25 09:18:37.999: W/dalvikvm(12922): threadid=1: thread exiting with uncaught exception (group=0x40018578)
03-25 09:18:38.009: E/AndroidRuntime(12922): FATAL EXCEPTION: main
03-25 09:18:38.009: E/AndroidRuntime(12922): java.lang.NoClassDefFoundError: javax.activation.DataHandler

我尝试将 jar 文件添加到构建路径,但还是一样。有人有什么建议吗?

最佳答案

澄清 - activation.jar 依赖于核心 Java rt.jar 库中的类,Android 运行时未提供这些类,因此失败。

javamail-android库已由第三方开发人员精心组合在一起,并提供所需的 JavaMail 功能而没有这种依赖性。它们现在可能有点旧(2009 年),但它们足以满足大多数功能。

关于android - 尝试在没有用户交互的情况下发送邮件 : java. lang.NoClassDefFoundError : javax. activation.DataHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15610429/

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