2016-12-20 7 views
0

私の目的は、Emailを通じてデータフレームを送信することです。以下のコードの私の作品です:scala - javax.mail.AuthenticationFailedException

import javax.mail._ 
import javax.mail.internet._ 
import org.apache.spark.{SparkConf, SparkContext} 

object EmailAlert { 
def main(args: Array[String]): Unit = { 

val sparkConf = new SparkConf().setAppName("E-mail Alert").setMaster("local") 
val sc = new SparkContext(sparkConf) 
var bodyText = "Test mail" 

// Set up the mail object 
val properties = System.getProperties 
properties.put("mail.smtp.host", "email-smtp.us-east-1.amazonaws.com") 
properties.put("mail.smtp.user", "********"); 
properties.put("mail.smtp.password", "********"); 
properties.put("mail.smtp.auth", "true"); 
properties.put("mail.smtp.port", "587") 
properties.put("mail.smtp.starttls.enable", "true"); 
val session = Session.getInstance(properties) 
val message = new MimeMessage(session) 

def getPasswordAuthentication(username:String, password:String):Authenticator= 
{ 
    new Authenticator(){ 
    override def getPasswordAuthentication():PasswordAuthentication = { 
     new PasswordAuthentication(username, password); 
    }} 
} 

// Set the from, to, subject, body text 
message.setFrom(new InternetAddress("[email protected]****.com")) 
message.setRecipients(Message.RecipientType.TO, "[email protected]****.com") 
message.setSubject("Count of DeviceIDs we are sent daily") 
message.setText(bodyText) 

// And send it 
Transport.send(message) 
    } 
} 

しかし、私は、コードの実行時に、私は次のエラーを取得する:スレッド内

例外「メイン」javax.mail.AuthenticationFailedException

何を私はここで行方不明です。

答えて

0

は私のために働いた:だから何が、私はそれらを作ることができれば

val sparkConf = new SparkConf().setAppName("E-mail Alert").setMaster("local") 
val sc = new SparkContext(sparkConf) 
var bodyText = "Test mail" 
val username = "*****************" 
val password = "************************" 
val smtpHost = "email-smtp.us-east-1.amazonaws.com" 

// Set up the mail object 
val properties = System.getProperties 
properties.put("mail.smtp.host", smtpHost) 
properties.put("mail.smtp.user", username); 
properties.put("mail.smtp.password", password); 
properties.put("mail.smtp.auth", "true"); 
properties.put("mail.smtp.port", "587") 
properties.put("mail.smtp.starttls.enable", "true"); 

val auth:Authenticator = new Authenticator() { 
    override def getPasswordAuthentication = new 
     PasswordAuthentication(username, password) 
} 

val session = Session.getInstance(properties,auth) 
val message = new MimeMessage(session) 

// Set the from, to, subject, body text 
message.setFrom(new InternetAddress("[email protected]*****.com")) 
message.setRecipients(Message.RecipientType.TO, "[email protected]****.com") 
message.setSubject("Count of DeviceIDs we are sent daily") 
message.setText(bodyText) 

// And send it 
Transport.send(message) 
1

Transport.send method that takes a user name and passwordを呼び出し、その後、(すべてで使用されていない)オーセンティケータを取り除くとmail.smtp.usermail.smtp.password、そしてmail.smtp.auth特性を取得します。それでも問題が解決しない場合は、JavaMail debug outputを転記してください。私はコードの下には、私が見逃しています何であるセッションに認証を渡す必要が

+0

は、なぜあなたは、彼らがすべてで使用されていないと言いました – toofrellik

+0

私が知る限り(私はScalaのエキスパートではありません)、宣言しているオーセンティケータは決して使用されていません。通常は、Session.getInstanceメソッドに渡されます。とにかく、私が言ったことをする。 [オーセンティケータは必要ありません](http://www.oracle.com/technetwork/java/javamail/faq/index.html#commonmistakes)。 –