public static void sendMail(final String userName, final String password, String toEmail, String subject, String message) {

    // mail gonderme protokolleri (smtp)
    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 m = new MimeMessage(session);
        m.setFrom(new InternetAddress("from-email@gmail.com"));
        m.setRecipients(Message.RecipientType.TO,
            InternetAddress.parse(toEmail/*"to-email@gmail.com"*/));
        m.setSubject(subject);
        m.setText(message);

        Transport.send(m);

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

public static void main (String[] kelle) {
    sendMail("birmail@gmail.com","bir_de_sifre",  "baskabirmail@gmail.com","Baslik","Govde");
}

Yukarıdaki kod ile amail gönderimi yapmaya çalışıyorum ancak "Must issue a STARTTLS command first" hatası alıyorum. Oracle sayfasındaki yönergerlere uydum ama nafile. Bu denediğim 4. kod örneği. ama hepsinde aynı hatayı alıyorum.

Windows7, Java 1.7, javaMail 1.4.7 Kullanıyorum.

gmail ile ilgili denediğiniz ve çalışan bir örnek var mı ya da bu hatayı niye alıyorum bileniniz var mıdır?

soruldu: 03 May '13, 01:32

Fatih's gravatar image

Fatih
51761021
cevap kabul oranı: 40%

değiştirildi: 03 May '13, 03:41

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183


Şöyle bir çalışan kod ortaya çıktı. Denedim çalışıyor. Referans olması için paylaşıyorum. Yardım için teşekkürler.

private static final String SMTP_HOST_NAME = "smtp.gmail.com";
private static final String SMTP_AUTH_USER = "****@gmail.com";
private static final String SMTP_AUTH_PWD = "****";

Port 465

public static void sendMail(String recipients, String subject, String body) throws Exception {
    /**
     * java.securty.Security
     * com.sun.net.ssl.internal.ssl.Provider 
     */
    Security.addProvider(new Provider());

    Properties props = new Properties();
    props.setProperty("mail.transport.protocol", "smtp");
    props.setProperty("mail.host", SMTP_HOST_NAME);
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.port", "465");
    props.put("mail.smtp.socketFactory.port", "465");
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.socketFactory.fallback", "false");
    props.setProperty("mail.smtp.quitwait", "false");

    Session session = Session.getDefaultInstance(props, new Authenticator()
    {
      protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(SMTP_AUTH_USER,SMTP_AUTH_PWD);
      }
    });
    MimeMessage message = new MimeMessage(session);
    message.setSubject(subject);
    message.setContent(body, "text/html");
    if (recipients.indexOf(',') > 0)
      message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
    else {
      message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
    }

    Transport.send(message);
  }

Çağrım

public static void main (String[] kelle) throws Exception {
        sendMail("****@gmail.com","Header","Body");

    }
permanent link

cevaplandı: 03 May '13, 03:37

Fatih's gravatar image

Fatih
51761021
cevap kabul oranı: 40%

değiştirildi: 03 May '13, 03:37

Eline sağlık :) SSL portu ile halletmişsin. kolay gelsin.

(03 May '13, 03:44) Turgay Can Turgay%20Can's gravatar image
(04 May '13, 00:36) nurettin nurettin's gravatar image

@nurettin, 465 portu SSL'dir. 25 ve 587 Portu TLS'dir. Kastım bu, sizin kasıtınız nedir?

(04 May '13, 04:24) Turgay Can Turgay%20Can's gravatar image

@J2EE yeterince yazmadım affedersiniz artık. TLS daha güncel olduğundan onu tavsiye ediyorum. Yani starttls ve port 587. openssl s_client -starttls smtp ile denedim, gmail'e bağlanıyor.

(04 May '13, 04:56) nurettin nurettin's gravatar image

Starttls'yi kaldır.

Çalışan farklı bir örnek için tıklayınız..

permanent link

cevaplandı: 03 May '13, 02:20

Turgay%20Can's gravatar image

Turgay Can
8.4k63799
cevap kabul oranı: 18%

1

starttls kaldirmakla bir sonuca varamadim. Verdiginiz ornek linkinde multipart diye bir obje var ancak objenin herhangi bir deklarasyonu ya da create edilmesi filan yok.

(03 May '13, 03:02) Fatih Fatih's gravatar image

Multipart multipart = new MimeMultipart(); olarak tanımlayın yüksek ihtimal, global tanımlamışım yazarken unutmuşumdur eklemeyi.

(03 May '13, 03:08) Turgay Can Turgay%20Can's gravatar image
1

Multipart'i create edip ekledim ancak gene basa donduk.

...... DEBUG SMTP SENT: MAIL FROM:******@gmail.com DEBUG SMTP RCVD: 530 5.7.0 Must issue a STARTTLS command first. bj12sm14333133eeb.8 - gsmtp

(03 May '13, 03:08) Fatih Fatih's gravatar image

Exception'ı e.printStackTrace(); olarak konsol'a alırmısın. Gelen hata logunu paylaşırsan sevinirm.

(03 May '13, 03:10) Turgay Can Turgay%20Can's gravatar image

Transport transport = session.getTransport("smtps"); smtps olarak deneyiniz.

Örnekte kendi sunucum üzerindeki smtp server credential'larını kullandığım için bu tip bir gereksinim duymamıştım fakat gmail'de varmış bu tip bir güvenlik kısıtlaması.

(03 May '13, 03:22) Turgay Can Turgay%20Can's gravatar image
1

Cevap için teşekkürler. Düzenlenmiş haliyle tam kodu cevap olara verdim. Bu sitede yardımcı cevap diye bir özellik yok galiba. İki cevabı da doğru kabul etmek için.

(03 May '13, 03:42) Fatih Fatih's gravatar image
6 yorumdan 5 tanesi gösteriliyor hepsini göster
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×4
×2

Soruldu: 03 May '13, 01:32

Görüntüleme: 6,889 kez

Son güncelleme: 04 May '13, 04:57

powered by BitNami OSQA