Java >> Java tutorial >  >> Tag >> java.net

Kunne ikke oprette forbindelse til SMTP-vært:smtp.gmail.com, port:587; indlejret undtagelse er:java.net.ConnectException:Forbindelse timeout:forbind

E-mail lykkedes gennem Gmail bruger JDK 7 med under Gmail indstillinger .

Gå til Gmail Indstillinger Konti og import Andre Google-kontoindstillinger og under Login og sikkerhed

  1. Totrinsbekræftelse:Fra
  2. Tillad mindre sikre apps:TIL
  3. App-adgangskoder:1 adgangskode (16 tegn lang), senere erstattet den nuværende adgangskode med denne.

brugt følgende maven-afhængigheder:

spring-core:4.2.2
spring-beans:4.2.2
spring-context:4.2.2
spring-context-support:4.2.2
spring-expression:4.2.2
commons-logging:1.2

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>

og min kildekode er:

import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import javax.swing.JOptionPane;
import java.util.List;
import java.util.Properties;

public class Email {

    public final void prepareAndSendEmail(String htmlMessage, String toMailId) {

        final OneMethod oneMethod = new OneMethod();
        final List<char[]> resourceList = oneMethod.getValidatorResource();

        //Spring Framework JavaMailSenderImplementation    
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost("smtp.gmail.com");
        mailSender.setPort(465);

        //setting username and password
        mailSender.setUsername(String.valueOf(resourceList.get(0)));
        mailSender.setPassword(String.valueOf(resourceList.get(1)));

        //setting Spring JavaMailSenderImpl Properties
        Properties mailProp = mailSender.getJavaMailProperties();
        mailProp.put("mail.transport.protocol", "smtp");
        mailProp.put("mail.smtp.auth", "true");
        mailProp.put("mail.smtp.starttls.enable", "true");
        mailProp.put("mail.smtp.starttls.required", "true");
        mailProp.put("mail.debug", "true");
        mailProp.put("mail.smtp.ssl.enable", "true");
        mailProp.put("mail.smtp.user", String.valueOf(resourceList.get(0)));

        //preparing Multimedia Message and sending
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
            helper.setTo(toMailId);
            helper.setSubject("I achieved the Email with Java 7 and Spring");
            helper.setText(htmlMessage, true);//setting the html page and passing argument true for 'text/html'

            //Checking the internet connection and therefore sending the email
            if(OneMethod.isNetConnAvailable())
                mailSender.send(mimeMessage);
            else
                JOptionPane.showMessageDialog(null, "No Internet Connection Found...");
        } catch (MessagingException e) {
            e.printStackTrace();
        }

    }

}

Håber dette vil hjælpe nogen.


Der er som sagt ikke noget galt med din kode. Hvis der er noget, bare for at lave nogle test, prøv at droppe godkendelsesdelen for at se, om det virker:

    public void sendPlainTextEmail(String host, String port,
            final String userName, final String password, String toAddress,
            String subject, String message) throws AddressException,
            MessagingException {

        // sets SMTP server properties
        Properties properties = new Properties();
        properties.put("mail.smtp.host", host);
        properties.put("mail.smtp.port", port);
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.starttls.enable", "true");
// *** BEGIN CHANGE
        properties.put("mail.smtp.user", userName);

        // creates a new session, no Authenticator (will connect() later)
        Session session = Session.getDefaultInstance(properties);
// *** END CHANGE

        // creates a new e-mail message
        Message msg = new MimeMessage(session);

        msg.setFrom(new InternetAddress(userName));
        InternetAddress[] toAddresses = { new InternetAddress(toAddress) };
        msg.setRecipients(Message.RecipientType.TO, toAddresses);
        msg.setSubject(subject);
        msg.setSentDate(new Date());
        // set plain text message
        msg.setText(message);

// *** BEGIN CHANGE
        // sends the e-mail
        Transport t = session.getTransport("smtp");
        t.connect(userName, password);
        t.sendMessage(msg, msg.getAllRecipients());
        t.close();
// *** END CHANGE

    }

Det er den kode, jeg bruger hver dag til at sende snesevis af e-mails fra min applikation, og den er 100 % garanteret at virke – så længe smtp.gmail.com:587 er selvfølgelig tilgængelig.


Til alle dem, der stadig leder efter svaret forklaret på en enkel måde, her er svaret:

Trin 1:De fleste af antivirusprogrammerne blokerer for afsendelse af e-mail fra computeren gennem et internt program. Hvis du får en fejl, bliver du derfor nødt til at deaktivere dit antivirusprogram, mens du kalder disse e-mail-afsendelsesmetoder/API'er.

Trin 2:SMTP-adgang til Gmail er deaktiveret som standard. Følg disse trin for at tillade applikationen at sende e-mails ved hjælp af din Gmail-konto

  1. Åbn linket:https://myaccount.google.com/security?pli=1#connectedapps
  2. I sikkerhedsindstillingen skal du indstille "Tillad mindre sikre apps" til TIL .

Trin 3:Her er et kodestykke fra den kode, som jeg har brugt, og den fungerer uden problemer. Fra EmailService.java:

private Session getSession() {
    //Gmail Host
    String host = "smtp.gmail.com";
    String username = "[email protected]";
    //Enter your Gmail password
    String password = "";

    Properties prop = new Properties();
    prop.put("mail.smtp.auth", true);
    prop.put("mail.smtp.starttls.enable", "true");
    prop.put("mail.smtp.host", host);
    prop.put("mail.smtp.port", 587);
    prop.put("mail.smtp.ssl.trust", host);

    return Session.getInstance(prop, new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(username, password);
        }
    });
}

Jeg har også skrevet et blogindlæg og en fungerende applikation på GitHub med disse trin. Tjek venligst:http://softwaredevelopercentral.blogspot.com/2019/05/send-email-in-java.html


Java tag