Отправка почты с использованием JAVA - PullRequest
3 голосов
/ 10 марта 2012

Привет, я хотел бы отправить простое письмо, используя java. Итак, я скачал mail.jar и файл activ.jar и написал простую программу для его отправки.

Моя простая почтовая программа успешно компилируется. Но когда я запускаю, это показывает следующую ошибку.

javax.mail.MessagingException: не удалось подключиться к узлу SMTP: localhost, порт: 25; Вложенное исключение: java.net.ConnectException: в соединении отказано: connect

Я сомневаюсь, как найти имя SMTP-сервера для моего ПК? Я искал на сайте, но ничего не понял ..

Пожалуйста, заставьте меня путешествовать в правильном направлении ...

С уважением

Ксавье КСБ

Ответы [ 8 ]

2 голосов
/ 10 марта 2012

Вам не нужно использовать имя SMTP-сервера для своего ПК, вам нужно использовать внешний почтовый сервер, например, Gmail, Yahoo и т. Д. Вы можете настроить почтовый сервер на своем компьютере, но он невопрос.В вашем случае вы должны зарегистрировать новую электронную почту в бесплатной почтовой системе и использовать ее как SMTP-сервер и порт.Вы можете узнать больше о примерах API JavaMail: cafeaulait , vipan

0 голосов
/ 13 октября 2014
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;


public class MailSender {

    public final String mailServerAddress;
    public final int mailServerPort;
    public final String senderAddress;

    public MailSender(String mailServerAddress, int mailServerPort, String senderAddress) {
        this.senderAddress = senderAddress;
        this.mailServerAddress = mailServerAddress;
        this.mailServerPort = mailServerPort;
    }

    public void sendMail(String to[], String cc[], String bcc[], String replyTo[], String subject, String body, String[] attachments) {

        if (to == null || to.length <= 0) {
            System.out.println("sendMail To address is NULL for email");
        }

        if (subject == null || subject.length() <= 0) {
            System.out.println("sendMail Subject is NULL for email");
        }

        if (body == null || body.length() <= 0) {
            System.out.println("sendMail Body is NULL for email");
        }

        Properties props = new Properties();
        // Specify the desired SMTP server and port
        props.put("mail.smtp.host", mailServerAddress);
        props.put("mail.smtp.port", Integer.toString(mailServerPort));
        props.put("mail.smtp.auth", "true");

        //TODO can we create session only once, with some session validation
        Session session = Session.getInstance(props, null);

        // create a new MimeMessage object (using the Session created above)
        Message message = new MimeMessage(session);
        StringBuilder addresses = new StringBuilder();
        addresses.append("FROM:").append(senderAddress);
        try {
            message.setFrom(new InternetAddress(senderAddress));

            // TO:
            InternetAddress[] toAddresses = new InternetAddress[to.length];
            addresses.append(" TO:");
            for (int i = 0; i < to.length; i++) {
                toAddresses[i] = new InternetAddress(to[i]);
                addresses.append(to[i] + ";");
            }
            message.setRecipients(Message.RecipientType.TO, toAddresses);

            // CC:
            if (cc != null && cc.length > 0) {
                InternetAddress[] ccAddresses = new InternetAddress[cc.length];
                addresses.append(" CC:");
                for (int i = 0; i < cc.length; i++) {
                    ccAddresses[i] = new InternetAddress(cc[i]);
                    addresses.append(cc[i] + ";");
                }
                message.setRecipients(Message.RecipientType.CC, ccAddresses);
            }

            // BCC:
            if (bcc != null && bcc.length > 0) {
                InternetAddress[] bccAddresses = new InternetAddress[bcc.length];
                addresses.append(" BCC:");
                for (int i = 0; i < bcc.length; i++) {
                    bccAddresses[i] = new InternetAddress(bcc[i]);
                    addresses.append(bcc[i] + ";");
                }
                message.setRecipients(Message.RecipientType.BCC, bccAddresses);
            }

            // ReplyTo:
            if (replyTo != null && replyTo.length > 0) {
                InternetAddress[] replyToAddresses = new InternetAddress[replyTo.length];
                addresses.append(" REPLYTO:");
                for (int i = 0; i < replyTo.length; i++) {
                    replyToAddresses[i] = new InternetAddress(replyTo[i]);
                    addresses.append(replyTo[i] + ";");
                }
                message.setReplyTo(replyToAddresses);
            }

            // Subject:
            message.setSubject(subject);
            addresses.append(" SUBJECT:").append(subject);

            // Body:
            Multipart multipart = new MimeMultipart();

            MimeBodyPart mimeBody = new MimeBodyPart();
            mimeBody.setText(body);
            multipart.addBodyPart(mimeBody);

            // Attachments:
            if (attachments != null && attachments.length > 0) {
                for (String attachment : attachments) {
                    MimeBodyPart mimeAttachment = new MimeBodyPart();
                    DataSource source = new FileDataSource(attachment);
                    mimeAttachment.setDataHandler(new DataHandler(source));
                    mimeAttachment.setFileName(attachment);
                    multipart.addBodyPart(mimeAttachment);
                }
            }

            message.setContent(multipart);

            // Send
            //Transport.send(message);
            String username = "amol@postmaster";
            String password = "amol";
            Transport tr = session.getTransport("smtp");
            tr.connect(mailServerAddress, username, password);
            message.saveChanges();      // don't forget this
            tr.sendMessage(message, message.getAllRecipients());
            tr.close();
            System.out.println("sendmail success " + addresses);
        } catch (AddressException e) {
            System.out.println("sendMail failed " + addresses);
            e.printStackTrace();
        } catch (MessagingException e) {
            System.out.println("sendMail failed " + addresses);
            e.printStackTrace();
        }
    }

    public static void main(String s[]) {
        if (s.length < 3) {
            System.out.println("Usage: MailSender RelayAddress SendersAddress ToAddress [ AttachmentFileName ]");
            System.exit(-1);
        }
        int k = 0;
        String relay = s[k++];
        String sender = s[k++];
        String[] toAddresses = new String[] {s[k++]};
        String[] attachmentFileName = new String[0];

        if (s.length == 4) {
            attachmentFileName = new String[] {s[k++]};
        }

        MailSender mailSender = new MailSender(relay, 25, sender);

        String[] mailTo = toAddresses;
        String[] mailCC = new String[] {};
        String[] mailBCC = new String[] {};
        String[] replyTo = new String[] {};

        String mailSubject = "Test Mail";
        String mailBody = "Mail sent using test utility";

        mailSender.sendMail(mailTo, mailCC, mailBCC, replyTo, mailSubject, mailBody, attachmentFileName);

    }

}
0 голосов
/ 08 октября 2014

отправка почты через локальный SMTP

Привет, Гайз! Если ваше приложение выполняется на сервере с собственным SMTP-сервером (например, с несколькими дистрибутивами UNIX, включая те), Y может проверить это:

$ echo 'anytext' | mail -s 'mailSubject' recepient@example.com

Y может отправить сообщение через него:

import java.io.IOException;
import java.util.Date;
import java.util.Properties;

import javax.mail.*;
import javax.mail.internet.*;

public class MailSender {
void systemSender(InternetAddress recepients, String subject, String body) throws IOException, AddressException, MessagingException {

        Properties properties = new Properties();
        Session session = Session.getDefaultInstance(properties , null);

        Message msg = new MimeMessage(session);
        msg.setFrom(new InternetAddress("do_not_reply@example.com", "NoReply"));
        msg.addRecipient(Message.RecipientType.TO, recepients);
        msg.setSubject(subject);
        msg.setText(body);
        Transport.send(msg);
        System.out.println("Email sent successfully...");
    }
}
0 голосов
/ 26 мая 2014

Это первая из ошибок, с которой вы можете столкнуться при выполнении почтовой программы, и могут сопровождаться различными другими ошибками, если они не исправлены должным образом.

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

  • 1) Исправьте данные хоста, как уже упоминали многие другие участники. 25 порт по умолчанию, измените это, если не то же самое.
  • 2) Проверьте, запрашивает ли сервер, на который вы заходите, аутентификацию или не. подробнее об этом в коде.
  • 3) Поместите mail.debug в свойства, чтобы знать, что именно происходит между вашим кодом и почтовый сервер. подробнее об этом в коде.

Мой код:

package com.datereminder.service;

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 ReminderDaemonService2 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Properties props = new Properties();
        props.put("mail.smtp.host", "mail.mycompany123.com");
// this mandates authentication at the mailserver
        props.put("mail.smtp.auth", "true");
// this is for printing debugs

        props.put("mail.debug", "true");


        Session session = Session.getDefaultInstance(props,
            new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("sadique.khan@mycompany123.com","xxxxxxxxxxx");
                }
            });

        try {

            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("sadique.khan@mycompany123.com"));
            message.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse("my.bestfriend@mycompany123.com"));
            message.setSubject("Testing Subject");
            message.setText("Dear Friend," +
                    "\n\n This is a Test mail!");

            Transport.send(message);



        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }
    }
}
0 голосов
/ 13 января 2014

Это полная короткая программа на Tomcat 7, которая использует SMTP-сервер в качестве службы (в данном случае SendGrid).Я использую его для отправки электронных писем с целью восстановления паролей пользователей.

Вы можете запустить их оба, локально включив бесплатно сервис SendGrid или просто мгновенно развернув его на конкретном PaaS, который разработал программное обеспечение.

0 голосов
/ 08 января 2013

Для начала нужно иметь почтовый сервер.Поэтому, пожалуйста, используйте такие, как http://www.hmailserver.com/,, который является бесплатным.Обратите внимание на опцию Auto-Ban, которая может быть отключена и в противном случае испортит ваш день.

Установить и настроить довольно просто.

Когда вы это сделаете, вы можетенаписать свой почтовый клиент приложение.

Проверьте это: http://www.xmarks.com/site/www.digilife.be/quickreferences/PT/Fundamentals%2520of%2520the%2520JavaMail%2520API.pdf

это старый веб-сайт «Основы JavaMail API» в формате PDF, в значительной степени лучший источник там (не знаю, почему он больше не онлайнна oracle.com).

и обращайтесь к этому по всем вопросам.Это очень хороший учебник, который проведет вас через весь процесс.Хороший справочник при поиске чего-либо:

http://de.scribd.com/doc/11385837/All-About-Java-Mail

Пожалуйста, не разработайте это с какой-нибудь учетной записью GMail или около того - их серверы не будут взаимодействовать, как вы делаете длямного проблем (много подключений, постоянное получение бана, причина ложного входа и т. д.).

0 голосов
/ 08 января 2013

Предполагая, что вы используете Gmail для отправки электронной почты.Код детали, как показано ниже:

package ripon.java.mail;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;

public class SendFromGmail {
    public static void main(String args[]){
        try{
            String host = "smtp.gmail.com";
            String from = "ripontest@gmail.com";
            String pass = "mypassword123";
            Properties props = System.getProperties();
            props.put("mail.smtp.starttls.enable", "true");
            props.put("mail.smtp.host", host);
            props.put("mail.smtp.user", from);
            props.put("mail.smtp.password", pass);
            props.put("mail.smtp.port", "587");
            props.put("mail.smtp.auth", "true");

            String[] to = {"riponalwasim@gmail.com"};

            Session session = Session.getDefaultInstance(props, null);
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(from));
            InternetAddress[] toAddress = new InternetAddress[to.length];

            // To get the array of addresses
            for( int i=0; i < to.length; i++ ) { // changed from a while loop
                toAddress[i] = new InternetAddress(to[i]);
            }
            System.out.println(Message.RecipientType.TO);

            for( int i=0; i < toAddress.length; i++) { // changed from a while loop
                message.addRecipient(Message.RecipientType.TO, toAddress[i]);
            }
            message.setSubject("sending in a group");
            message.setText("Welcome to JavaMail");
            Transport transport = session.getTransport("smtp");
            transport.connect(host, from, pass);
            transport.sendMessage(message, message.getAllRecipients());
            transport.close();
        }
        catch(Exception e){
            e.getMessage();
        }
    }
}
0 голосов
/ 10 марта 2012

Вам необходимо установить и запустить SMTP-сервер на вашем ПК или сервере, если вы хотите подключиться к localhost. Существует множество бесплатных программ для Windows и Linux.

...