javax.mail.NoSuchProviderException: Няма карміцеля SMTPS

Я спрабую наладзіць мой Java праект, каб мець магчымасць адпраўляць электронную пошту (праз г-пошту, калі гэта мае значэнне), і я атрымліваю «javax.mail.NoSuchProviderException: Няма правайдэр для SMTPS» кожны раз, калі я спрабую запусціць наступная радок (што капіяваць/ўставіць з іх прыкладу).

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

Я агледзеўся і выявіў, што гэта, як правіла, выкідваецца, таму што вы не маеце mail.jar уключаны ў вашым шляху да класаў, але я на самой справе маюць mail.jar ўключаны. Так як я бягу JDK 1.6 ня трэба ўключаць activation.jar ў адпаведнасці з FAQ тут ( http://www.oracle.com/technetwork/java/javamail/faq-135477.html#classpath ). Акрамя таго, activation.jar, здаецца, не прысутнічае ў версіі 1.4.7 ад JavaMail.

Толькі ў выпадку, калі нешта испортлись, я паўторна загружаны ўсім паштовыя з сайта аракула, экстрагирую яго і дадаю банку свежай (пасля выдалення старой слоічкі) і я ўсё яшчэ атрымліваю тую ж памылку. Любыя думкі адносна таго, што гэтае пытанне можа быць у гэты момант?

EDIT: Вось поўны стэк трасіроўкі, друкуецца:

javax.mail.NoSuchProviderException: No provider for smtps
    at javax.mail.Session.getProvider(Session.java:433)
    at javax.mail.Session.getTransport(Session.java:627)
    at javax.mail.Session.getTransport(Session.java:608)
... my code that calls getTransport() ...
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
... more of my code ...
    at java.lang.Thread.run(Thread.java:662)
8

9 адказы

Так атрымліваецца, што праблема ў тым, што састарэлая версія mail.jar была ўключана ў праекце, які я спасылаюцца і ўсё, падчас абнаўлення гэтай копіі mail.jar, пытанне было вырашана.

Для далейшага выкарыстання, ці ёсць спосаб, каб увайсці або забяспечыць бачнасць на такіх гарлачах канфліктаў?

https://confluence.atlassian.com/confkb/cannot-send-email-due-to-javax-mail-nosuchproviderexception-smtp-error-154079.html

7
дададзена
Дзякуй за гэта абнаўленне. У мяне была такая ж праблема і тую ж прычыну. Мая праблема была вырашана, паставіўшы javax.mail.jar ў пачатку майго CLASSPATH (я знаходжуся ў асяроддзі UNIX, і я з дапамогай каманднага радка).
дададзена аўтар Hampden123, крыніца
Мы сутыкнуліся з такой жа сітуацыі з выкарыстаннем Java з Wildfly 8. Мы вырашылі гэтую праблему, у тым ліку SMTP залежнасць ад pom.xml, каб прымусіць пастаўшчык павінна быць загружаная. Яшчэ адно рашэнне, якое працавала было наладзіць пошту на адміністрацыю Wildfly і выкарыстоўваць @Resource. Аднак апошні падыход патрабуе пэўнай канфігурацыі сервера прыкладанняў.
дададзена аўтар Marcio Jasinski, крыніца

Толькі ў выпадку, калі хто-то робіць тую ж памылку, у мяне ёсць: <�моцны> вы павінны выкарыстоўваць малыя літары для пратаколу дазваляльнага працаваць. Калі вы набярэце SMTP у якасці імя пратаколу замест SMTP вы атрымаеце NoSuchProviderException . Гэта, хутчэй за ўсё, працуе так жа, як для ўсіх іншых правайдэраў.

5
дададзена

Пераканайцеся, што ў вас ёсць javax.mail.jar ў пабудове шляху. Калі вы выкарыстоўваеце зацьменне вы, магчыма, прыйдзецца абнавіць або пстрыкніце правай кнопкай мышы праект у правадыру файлаў, выберыце Настройка шляху зборкі, дадайце знешні файл JAR, а затым дадаць яго ў шлях зборкі. Адправіць па электроннай пошце з дапамогай Java дае працоўны код (я тэставаў) у выпадку, калі вы проста хочаце глядзець праз ваш. Калі гэта не праблема, ці вы не карыстаецеся зацьменне, трассирование б нядрэнна

4
дададзена
Я шкадую, што я пераключыўся рэчы ў маёй галаве, калі я пісаў, што. Вы павінны пераканацца, што <�б> javax.mail.jar у шляху зборкі. (Выкарыстоўвайце тыя ж самыя крокі, якія я пісаў вышэй). Я проста зноў пабег па электроннай пошце код у спасылцы вышэй, і яна працуе без рамак у маім імпарце.
дададзена аўтар Keith Aylwin, крыніца
Я выкарыстоўваю Eclipse. З майго (абмежаваны) разуменне, JDK 1.6 аўтаматычна ўключае JAF. Хіба гэта не так?
дададзена аўтар JuniorIncanter, крыніца
Гэта ў маім шляху зборкі. Я пацвердзіў гэта, пстрыкнуўшы правай кнопкай мышы на мой праект (У Eclipse), выбраўшы пункт «Уласцівасці», выберыце «Java Build Path», і, нарэшце, выбраўшы «Бібліятэкі». Я магу бачыць mail.jar там. Я магу таксама ўбачыць яго на ўкладцы «Парадак і экспарту». Я дадаў трасіроўкі стэка ў выпадку, які дапамог бы.
дададзена аўтар JuniorIncanter, крыніца
Акрамя таго, для даведкі, я дадаў каментар у чэку Yan Cheng па гэтай спасылцы вы падалі ( stackoverflow.com/ пытанні/3649014/адправіць электронную пошту, выкарыстоўваючы-Java- ), і я атрымліваю тую ж памылку на адной і той жа лініі.
дададзена аўтар JuniorIncanter, крыніца

Пры выкарыстанні пошты API пераканайцеся, што пратакол, які вы чакаеце працаваць? У гэтым выпадку вам не хапае smtp.jar з вашым праектам Eclipse.

Ёсць некалькі слоікаў для розных пратаколаў даступныя ў паштовай АПА. EX: dsn.jar, gimap.jar, imap.jar, mailapi.jar, pop3.jar, smtp.jar

3
дададзена
Дзякуючы Nimesh makwana і @nakib.
дададзена аўтар Chirag Savsani, крыніца
Гэта сапраўды адказ для многіх выпадкаў. Большасць людзей будзе абнаўляць JavaMail і будзе сапраўды працаваць, але праблема прадстаўлена ў версіі з 1.4.7. Версія 1.4.7 мае патрэбу ў smtp.jar. Калі вы не можаце абнавіць версію JavaMail, гэта рашэнне!
дададзена аўтар nakib, крыніца

JavaMail пытаецца ClassLoader для файла канфігурацыі, які настройвае пастаўшчык пратаколу. Калі ClassLoader не працуе правільна, JavaMail не зможа знайсці файл канфігурацыі. Там ёсць несумяшчальнасць паміж тым, як OSGi загрузнікаў класаў працуюць і што JavaMail чакае, што можа выклікаць гэтую праблему. Калі вы выкарыстоўваеце прыкладанне ў самым Eclipse, што можа растлумачыць гэтую праблему. Іншая распаўсюджаная прычына гэтай праблемы з'яўляецца імпарт файла mail.jar ў ваш праект такім чынам, што файлы клас здабываюцца з файла пляшкі і ўключаны ў дадатку, але файлы канфігурацыя засталіся ззаду.

Паспрабуйце запусціць праграму з каманднага радка з дапамогай каманды «Java» і з mail.jar файла ў вашай CLASSPATH.

1
дададзена
Калі вы можаце, паспрабуйце запусціць яго па-за Eclipse. Ці ёсць «SMTP» не ў стане дакладна так жа? Паспрабуйце: session.addProvider (новы правайдэр (Provider.Type.Transport, "SMTPS", "com.sun.mail.smtp.SMTPSSLTransport", "", ""));
дададзена аўтар Bill Shannon, крыніца
Спрабавалі што, і думаў, што гэта быў нейкі шанец, як гэта фіксаваны іншае пытанне, але няма косткі ў гэтай сітуацыі.
дададзена аўтар JuniorIncanter, крыніца
Але для даведкі, я бег прыкладання ў самым Eclipse.
дададзена аўтар JuniorIncanter, крыніца

спрабаваць

Transport transport = session.getTransport("smtp");
1
дададзена

на карысць іншых людзей з падобнай праблемай, як я.

пераканайцеся, што вы памятаеце, каб усталяваць

 properties.put("mail.transport.protocol", "smtp"));

замест

 properties.put("mail.transport.protocol", "SMTP"));
0
дададзена

Я меў mail.jar і activation.jar ў Lib каталога TOMCAT і mailapi.jar ў Lib каталогу прыкладання. Дадатак чытае mailapi.jar падчас выканання, так як mailapi.jar лёгкі вага версіі паштовага АПА і мае патрэбу ў smtp.jar, што чаму прымяненне кідае выключэнне Smtp. Такім чынам, калі вы хочаце пазбавіцца ад гэтага выключэння,

Калі ласка, вырашыць канфлікт паміж mail.jar і mailapi.jar па:

  • Выдаленне mailapi.jar (калі ён ёсць у шляху да класаў).
  • або проста трымаць адна пара mailapi.jar і smtp.jar у шляху да класаў і выдаліць
    mail.jar.
  • або проста трымаць адну пару mail.jar і activation.jar ў шлях да класаў (чысты падыход).

(FYI: Я шукаў файлавую сістэму, каб даведацца, звязаныя пошты опарник і павінна ведаць, што ў мяне ёсць супярэчлівая .jar файл у дададзеным Gradle у шляху да класаў па наступным шляху() C: \ workspace.metadata.plugins \ org.eclipse.wst. server.core \ tmp0 \ wtpwebapps \ TestApp \ WEB-INF \ Lib)

0
дададзена

У мяне тое ж пытанне. я вырашыць яе шляхам дадання правільнай залежнасці ў мавена. ідэнтыфікатар групы - javax.mail Artifactory - пошта версія 1.4.7

калі вы робіце, без Maven зборкі, дадайце правільную бібліятэку для javax.mail

0
дададзена