Перейти к содержимому

Фотография

Как отправить почту из скрипта?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3

#1 Galina

Galina

    Постоянный участник

  • Members
  • PipPipPip
  • 151 сообщений
  • Город:Москва

Отправлено 27 мая 2010 - 10:49

Добрый день!

Скажу сразу, в JAVA я чайник еще тот, могу не видеть очевидных вещей. Есть проблема, нужна помощь.
Хочется отправить на почту что-нибудь.
Есть вот такой код:
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;

public class Mail {
  public static void main(String args[]) throws Exception {
   
	String host = "smtp.mail.ru";
	String from = "CompareTestResults@mail.ru";
	String to = "plava@mail.ru";

	// Get system properties
	Properties props = System.getProperties();

	// Setup mail server
	props.put("mail.smtp.host", host);
	props.put("mail.from", "CompareTestResults@mail.ru");
	props.put("mail.smtp.auth", "true");
	props.put("mail.user", "CompareTestResults");
	props.put("mail.password", "[пароль]");
 

	// Get session
	Session session = Session.getDefaultInstance(props, null);

	// Define message
	MimeMessage message = new MimeMessage(session);
	message.setFrom();
	message.setRecipients(Message.RecipientType.TO, to);
	message.setSubject("The Subject");
	message.setText("The Message");

	// Send message
	Transport.send(message);
  }
}

Компиляция проходит без ошибок. При исполнении выдает:

Exception in thread "main" javax.mail.AuthenticationFailedExceptiom: failed to connect, no password specified


Подскажите, пожалуйста, как сделать корректную аутентификацию?
Заранее спасибо!
  • 0

#2 ShortLegged

ShortLegged

    Постоянный участник

  • Members
  • PipPipPip
  • 155 сообщений
  • Город:Moscow

Отправлено 27 мая 2010 - 14:02

Попробуйте получить экземпляр объект Transport из сессии и присоединиться к серверу вызвав метод connect у этого транспорта. При вызове можно задать логин и пароль. После этого через этот транспорт отправлять сообщения.
  • 0

#3 enki86

enki86

    Постоянный участник

  • Members
  • PipPipPip
  • 231 сообщений


Отправлено 28 мая 2010 - 09:38

Только не пользуйтесь в этом случае send

Any connection associated with any Transport instance used to invoke this method is ignored and not used. This method should only be invoked using the form Transport.send(msg);, and should never be invoked using an instance variable

Пароль точно подходящий?
И попробуйте указать нормальный адрес (кому) вместо to
message.setRecipients(Message.RecipientType.TO, to);
  • 0

#4 Galina

Galina

    Постоянный участник

  • Members
  • PipPipPip
  • 151 сообщений
  • Город:Москва

Отправлено 31 мая 2010 - 13:51

Если кому интересно, работает вот так (спасибо тем кто ответил выше, спасибо одному очень умному и хорошему разработчику :acute: )

import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;

public class Mail {

public static void main( String[] args )
	{	
//пример для отправителя с mail.ru
	final String username = "[почта отправителя]";
	final String password = "[пароль]";

		Properties props = new Properties();
		props.put("mail.smtp.host", "smtp.mail.ru");
		props.put("mail.smtp.auth", "true");
	props.put("mail.smtp.port", "25");
 
	Session session = Session.getDefaultInstance(props,
	new javax.mail.Authenticator() 
	{
		protected PasswordAuthentication getPasswordAuthentication()
		{ return new PasswordAuthentication(username,password);	}
	});		
 
		try {
 
			Message message = new MimeMessage(session);
		message.setFrom(new InternetAddress("[почта отправителя]"));
		message.setRecipients(Message.RecipientType.TO, 
						InternetAddress.parse("[почта получателя]"));
		message.setSubject("Subject");
		message.setText("TEST!");
 
		Transport.send(message);
 
		System.out.println("Done");
 
		} catch (MessagingException e) {
			throw new RuntimeException(e);
		}
	}


}

  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных