2013-12-10 3 views
1

Я могу отправить электронное письмо, используя этот код. Но мне нужно изменить mail.smtp.host и mail.smtp.port в зависимости от типа учетной записи пользователя.java как отправить электронную почту через любую учетную запись

Я создаю приложение, в котором хочу, чтобы пользователь просто указывал свой адрес электронной почты и пароль, а затем код детализирует детали. Есть ли способ сделать это? Я мог бы попытаться определить тип учетной записи с адреса электронной почты, но это не всегда очевидно.

import java.io.BufferedReader; 
    import java.io.BufferedWriter; 
    import java.io.File; 
    import java.io.FileNotFoundException; 
    import java.io.FileReader; 
    import java.io.FileWriter; 
    import java.io.IOException; 
    import java.io.PrintWriter; 
    import java.nio.ByteBuffer; 
    import java.nio.charset.Charset; 
    import java.nio.file.Files; 
    import java.nio.file.Paths; 
    import java.util.Properties; 
    import java.util.Scanner; 

import javax.activation.*; 
import javax.mail.*; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeBodyPart; 
import javax.mail.internet.MimeMessage; 
import javax.mail.internet.MimeMultipart; 

public class MailProjectClass { 
    //final static String username = "[email protected]"; 
    //final static String password = "xxxx"; 
    final static String username = "[email protected]"; 
    final static String password = "yyyy"; 
    static Transport bus; 

public static void main(String[] args) { 



    Properties props = new Properties(); 
    props.put("mail.smtp.auth", true); 
    props.put("mail.smtp.starttls.enable", true); 

    //props.put("mail.smtp.host", "smtpout.europe.secureserver.net"); 
    //props.put("mail.smtp.port", "80"); //25, 3535, 80 465  
    props.put("mail.smtp.host", "smtp.gmail.com"); 
    props.put("mail.smtp.port", "587"); //25, 3535, 80 465 

    Session session = Session.getInstance(props, 
      new javax.mail.Authenticator() { 
       protected PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication(username, password); 
       } 
      }); 


     sendEmail(session,"[email protected]erever.com"); 


    } 

    public static void sendEmail(Session session, String emailAddress) { 

     try { 

      Message message = new MimeMessage(session); 
      message.setFrom(new InternetAddress(username)); 
      message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(emailAddress)); 
      message.setSubject("Homework"); 

      Multipart multipart = new MimeMultipart("alternative"); 

      MimeBodyPart messageBodyPart = new MimeBodyPart(); 


      String content = "Blank"; 
      try { 

       content = readFile("C:\\Letter.txt", Charset.defaultCharset()); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      messageBodyPart.setContent(content, "text/plain"); 
      messageBodyPart.setDisposition(Part.INLINE); 
      multipart.addBodyPart(messageBodyPart); 

      try { 

       content = readFile("C:\\Letter.htm", Charset.defaultCharset()); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      messageBodyPart.setContent(content, "text/html"); 
      messageBodyPart.setDisposition(Part.INLINE); 
      multipart.addBodyPart(messageBodyPart); 


      message.setContent(multipart); 

      Transport.send(message); 


     } catch (MessagingException e) { 
      e.printStackTrace(); 
     } 
    } 

EDIT 1

Если я хочу, чтобы закодировать большинство деталей нужно себя - есть Java класс, который делает диалог для меня - то есть позволяет получать всю другую необходимую информацию в зависимости по типу счета?

ответ

0

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

0

Вы можете сделать следующее,

  1. Создать статическую карту с «Gmail», как ключ и «smtp.gmail.com» в качестве значения, как это поставить все детали почты, такие как Gmail, Hotmail, Yahoo и т. д.
  2. Создайте еще одну статическую карту для порта с «gmail» в качестве ключа и «587» в качестве значения.
  3. Перед добавлением хоста & порт в свойства, получить хост & порт с карты на основе вашего имени пользователя. Получите ключ от подстроки имени пользователя.
0

Вы когда-нибудь пытались настроить почтовый клиент, такой как Outlook Express, Thunderbird или другие другие? Если это так, вы узнаете, что им нужна гораздо больше информации, просто адрес электронной почты и пароль. Это может служить ключом к тому, что вы не можете сделать.

0

Вещи, которые вы можете попытаться выяснить параметры сервера:

  • хранить данные для крупных провайдеров (Hotmail, Gmail и т.д.) в вашей программе, которая должна охватить большинство случаев
  • проверки запись mx для главной части электронной почты вашего сервера имен, это даст вам SMTP-сервер для этого домена, в большинстве случаев сервер IMAP/POP3 является тем же.
  • Попробуйте порты по умолчанию на этих серверах и попытаться соединиться с возможными комбинациями протоколов (SMTP/POP3/IMAP с SSL/TLS/равнину/и т.д. ...)

Но всегда будут использоваться по пользователь должен выбрать, например, если он хочет использовать IMAP или POP3.

Смежные вопросы