我已经使用JavaMail-android库在后台发送邮件。为了从用户名和密码中释放用户,我决定使用在Android手机中添加帐户/配置帐户时生成的Auth令牌。所以我可以获得令牌和我如何使用令牌在后台发送邮件,就像使用smtp(javamail-android)库一样。
答案 0 :(得分:4)
您可以通过Service轻松打电话发送课程,它会自动生效,电子邮件会在特定时间发送。
我在这里发布了示例代码:
你应该用GMailSender sender = new GMailSender(send_id,send_pass,imgpath);
编写服务代码
它仅用于通过您的Gmail密码发送电子邮件。
现在GmailSender.java如下:
public class GMailSender extends javax.mail.Authenticator
{
private String mailhost = "smtp.gmail.com";
private String user;
private String password;
private Session session;
private String path_img;
static {
// AppLogger.LogError("Reached to Step1.1");
Security.addProvider(new JSSEProvider());
}
public GMailSender(String user, String password,String path)
{
path_img = path;
// AppLogger.LogError("Reached to Step1.2");
this.user = user;
this.password = password;
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");
//AppLogger.LogError("Reached to Step1.3");
session = Session.getDefaultInstance(props, this);
//AppLogger.LogError("Reached to Step1.4");
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password);
}
public synchronized void sendMail(String subject, String body, String sender, String recipients) throws Exception {
try{
// AppLogger.LogError("Reached to Step1.5");
MimeMessage message = new MimeMessage(session);
// AppLogger.LogError("Reached to Step1.6");
DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/html"));
message.setSender(new InternetAddress(sender));
message.setRecipients(Message.RecipientType.TO,InternetAddress.parse(recipients));
//AppLogger.LogError("Reached to Step1.7");
message.setSubject(subject);
message.setDataHandler(handler);
MimeMultipart multipart = new MimeMultipart("related");
String htmlText=null;
BodyPart messageBodyPart = new MimeBodyPart();
htmlText = body+ "";
messageBodyPart.setContent(htmlText, "text/html");
MimeBodyPart attachmentPart = new MimeBodyPart();
FileDataSource fileDataSource = new FileDataSource(path_img) {
@Override
public String getContentType() {
return "image/jpg";
}
};
attachmentPart.setDataHandler(new DataHandler(fileDataSource));
attachmentPart.setFileName("image.jpg");
multipart.addBodyPart(messageBodyPart);
multipart.addBodyPart(attachmentPart);
message.setContent(multipart);
//AppLogger.LogError("Reached to Step1.8");
if (recipients.indexOf(',') > 0)
{
//AppLogger.LogError("Reached to Step1.9");
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
Transport.send(message);
// AppLogger.LogError("Reached to Step2.1");
}
else
{
//AppLogger.LogError("Reached to Step2.2");
message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
Transport.send(message);
//AppLogger.LogError("Reached to Step2.3");
}
// Transport.send(message);
// AppLogger.LogError("Reached to Step2.4");
}catch (Exception e)
{
throw new FileNotFoundException();
}
}
public class ByteArrayDataSource implements DataSource {
private byte[] data;
private String type;
public ByteArrayDataSource(byte[] data, String type) {
super();
this.data = data;
this.type = type;
}
public ByteArrayDataSource(byte[] data) {
super();
this.data = data;
}
public void setType(String type) {
this.type = type;
}
public String getContentType() {
if (type == null)
return "application/octet-stream";
else
return type;
}
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(data);
}
public String getName() {
return "ByteArrayDataSource";
}
public OutputStream getOutputStream() throws IOException {
throw new IOException("Not Supported");
}
}
尝试此示例并尝试所有电子邮件ID。并确保您已导入所需的所有库..