2014-12-11 3 views
0

Я использую Javamail для того, чтобы отправить сообщение от моего gmail другим пользователям, но система не могла его отправить. Он продолжает говорить, что не может загрузить основной класс.Не удается отправить письмо с помощью gmail-smtp с помощью javamail?

Код, который я получил, был демонстрационный код, поэтому я думаю, что это не проблема. Во всяком случае, я размещаю его здесь.

package Email; 

import java.util.Properties; 

import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 

public class SendMailTLS { 

    public static void main(String[] args) { 

     final String username = "[email protected]"; 
     final String password = "abc"; 

     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("[email protected]")); 
      message.setRecipients(Message.RecipientType.TO, 
       InternetAddress.parse("[email protected]")); 
      message.setSubject("Testing Subject"); 
      message.setText("Dear Mail Crawler," 
       + "\n\n No spam to my email, please!"); 

      Transport.send(message); 

      System.out.println("Done"); 

     } catch (MessagingException e) { 
      throw new RuntimeException(e); 
     } 
    } 
} 

Теперь я установил свой CLASSPATH со всей банкой в ​​D:\..., а также место, где я хранить свой файл .java. В ссылке нет места. Когда я скомпилировал, программа сделала это просто отлично. Проблема началась, когда я попытался запустить код.

`

PS D:\Documents\java> javac SendMailTLS.java 
PS D:\Documents\java> java SendMailTLS 
Error: Could not find or load main class SendMailTLS 
PS D:\Documents\java> 
PS D:\Documents\java> java Email.SendMailTLS 
Error: Could not find or load main class Email.SendMailTLS 
PS D:\Documents\java> 
PS D:\Documents\java> java .Email.SendMailTLS 
Error: Could not find or load main class .Email.SendMailTLS 
PS D:\Documents\java> 
PS D:\Documents\java> java -cp D:\Documents\java\ Email.SendMailTLS 
Error: Could not find or load main class Email.SendMailTLS 
PS D:\Documents\java> 
PS D:\Documents\java> java -cp D:\Documents\java\ SendMailTLS 
Error: Could not find or load main class SendMailTLS 
PS D:\Documents\java> 
` 

Любая идея, почему это так?

Большое спасибо.

Zestos.

+0

Я просмотрел этот пост и попробовал его, но безрезультатно. Я действительно нуждаюсь в этой программе и не смог понять, что с ней не так. Прошло три дня, и я не понимаю, почему. Пробовал CLASSPATH, попробовал '. \' С именем пакета. Никто не работает? Любая помощь? – Zestos

+0

Вы должны вызвать 'javac Email.SendMailTLS.java', а затем позвонить java -cp ./ java' Email.SendMailTLS' и ваш файл 'SendMailTLS.java' должен находиться в каталоге' java \ Email' – Jens

+0

Спасибо @Jens. Это действительно решило мою проблему «не удалось загрузить основной класс». – Zestos

ответ

1

Вы объявляете ваш класс, чтобы быть в пакете «Электронная почта». Класс загрузчик будет искать этот класс в подкаталоге «Электронная почта», а не в текущем каталоге. Создайте каталог «Электронная почта» в каталоге вашего пути к классам или в текущем каталоге и переместите туда свой класс. Затем вызовите класс как Email.SendMailTLS

В качестве альтернативы просто удалите оператор package из своего класса.

BTW, соглашение об именах заключается в том, чтобы сохранить имя пакета в нижнем регистре.

+0

Отлично! Это решило мою проблему «не удалось загрузить класс почты». Большое спасибо. Но теперь я получаю эту проблему. 'Исключение в потоке" main "java.lang.RuntimeException: com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Сначала необходимо выполнить команду STARTTLS . df1sm1421038pbb.2 - gsmtp по электронной почте.SendMailTLS.main (SendMailTLS.java:48) ' Любая идея, почему? – Zestos

0

Измените значение свойства mail.smtp.starttls.enable ложь, как это:

props.put("mail.smtp.starttls.enable", "false"); 
Смежные вопросы