2011-12-23 11 views
6

Tôi muốn thực hiện một chức năng có thể gửi email đến bất kỳ người nhận được chỉ định nào (gmail). Vấn đề tôi đang phải đối mặt là xác thực của tôi không thành công khi tôi cố gắng cung cấp thông tin đăng nhập sử dụng xác thực hai chiều trong gmail. Với tài khoản không có xác thực hai chiều, nó hoạt động tốt. Vì vậy, những gì tôi phải làm để làm cho mọi thứ xảy ra với hai cách xác thực được kích hoạt?Gửi email qua java trong tài khoản gmail có xác thực hai chiều

Sau đây là mã mà tôi đang sử dụng để gửi email.

public static boolean sendMail(String fromMail, String fromPassword, String toMail, String message) { 
     try { 
      final String user = fromMail, password = fromPassword; 
      Properties prop = new Properties(); 
      prop.setProperty("mail.smtp.host", "smtp.gmail.com"); 
      prop.setProperty("mail.smtp.port", "465"); 
      prop.setProperty("mail.smtp.auth", "true"); 
      prop.setProperty("mail.smtp.ssl.enable", "true"); 
//   prop.put("mail.debug", "true"); 

//   prop.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 

      Session sess = Session.getDefaultInstance(prop, new Authenticator() { 

       @Override 
       protected javax.mail.PasswordAuthentication getPasswordAuthentication() { 
        return new javax.mail.PasswordAuthentication(user, password); 
       } 
      }); 

//   Session sess=Session.getDefaultInstance(prop); 

      sess.setDebug(true); 

      Message msg = new MimeMessage(sess); 

      msg.setFrom(new InternetAddress(fromMail)); 
      msg.setRecipient(Message.RecipientType.TO, new InternetAddress(toMail)); 
      msg.setText(message); 
      msg.setContent(message, "text/html"); 


      Transport.send(msg); 
      return true; 
     } catch (MessagingException msgEx) { 
      msgEx.printStackTrace(); 
      return false; 
     } 
    } 

Trả lời

5

Bằng cách tạo mật khẩu dành riêng cho ứng dụng tại https://accounts.google.com/IssuedAuthSubTokens. Ngoài ra, hãy xem this youtube video về mật khẩu dành riêng cho ứng dụng.

+0

Tôi đã kiểm tra các liên kết và có một mật khẩu dành riêng cho ứng dụng và tôi có thể đăng nhập thành công vào trình duyệt. Nhưng trong đoạn code ở đây ở một số nơi tôi cần phải xác định mật khẩu đó. Bởi vì nó vẫn còn cho tôi lỗi sau khi tạo mật khẩu ứng dụng cụ thể quá. – ankurtr

+0

Thú vị. Một thời gian trước khi tôi chạy vào này, dịch vụ google smtp đã cho tôi một thông báo lỗi xác thực 2 chiều cụ thể. Bạn đã kiểm tra điều đó chưa? – Friek

+0

vâng, tôi chỉ nói về điều đó thôi. tôi nhận được lỗi có tên là "javax.mail.AuthenticationFailedException: 535-5.7.1 Mật khẩu dành riêng cho ứng dụng được yêu cầu". Vậy phải làm gì để giải quyết điều đó? – ankurtr

2

Có hai giải pháp cho việc này:

  1. Bạn có thể tạo mật khẩu cụ thể ứng dụng bằng cách liên kết đưa ra bởi "friek" ie "https://accounts.google.com/IssuedAuthSubTokens" và sử dụng mật khẩu dành riêng cho ứng dụng được tạo ở vị trí mật khẩu ban đầu của bạn. Tôi đã làm điều này và làm việc

hoặc

  1. Lý do tại sao các ngoại lệ của nó (javax.mail.AuthenticationFailedException: mật khẩu 535-5.7.1 ứng dụng cụ thể bắt buộc) đang xảy ra là bạn có thể có đã kích hoạt quy trình xác minh 2 bước cho tài khoản gmail của bạn. Nếu bạn sử dụng tài khoản mà bạn không kích hoạt quy trình xác minh 2 bước thì bạn có thể gửi email bằng mật khẩu ban đầu. Tôi cũng đã thử điều này và làm việc tốt.
+0

Bạn nói đúng, tôi vừa tạo tài khoản mới mà không cần xác thực 2 bước và nó hoạt động tốt cho tôi. Cảm ơn vì sự giúp đỡ !! – Akash5288