J'ai décidé d'envoyer et de recevoir des e-mails depuis et vers Exchange Online en utilisant l'application Java (Kotlin), j'ai donc essayé d'envoyer des e-mails que je pourrais facilement trouver.
kotlin:build.gradle.kts
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("org.springframework.boot") version "2.1.6.RELEASE"
kotlin("jvm") version "1.3.41"
kotlin("plugin.spring") version "1.3.41"
}
repositories {
mavenCentral()
}
dependencies {
implementation(platform("org.springframework.boot:spring-boot-dependencies:2.1.6.RELEASE"))
implementation("org.springframework.boot:spring-boot-starter-mail")
implementation(kotlin("stdlib-jdk8"))
}
val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions {
jvmTarget = "1.8"
}
val compileTestKotlin: KotlinCompile by tasks
compileTestKotlin.kotlinOptions {
jvmTarget = "1.8"
}
application.yml
spring:
mail:
host: smtp.office365.com
port: 587
username:Meru adore
password:Passwa-do
properties:
mail:
smtp:
starttls:
enable: true
Application.kt
import org.springframework.boot.CommandLineRunner
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.mail.SimpleMailMessage
import org.springframework.mail.javamail.JavaMailSender
@SpringBootApplication
class Application(val mailSender: JavaMailSender): CommandLineRunner {
override fun run(vararg args: String?) {
val mailMessage = SimpleMailMessage().apply {
setTo("Destination")
from = "Meru adore"
subject = "Kenmei"
text = "Vraiment"
}
mailSender.send(mailMessage)
}
}
fun main( args: Array<String>) {
runApplication<Application>(*args)
}
Comme je pouvais envoyer du courrier facilement comme celui-ci, j'ai pensé que même s'il s'agissait d'Exchange Online, il serait facile de le recevoir comme avec un serveur de messagerie normal. En fin de compte, c'est vrai, mais quand j'ai trébuché sur le chemin, j'ai été frappé de suspicion et j'ai fait des allers-retours.
Depuis que j'ai pu envoyer un e-mail, j'ai prétendu que je pouvais le recevoir naturellement, et quand est venu le temps de l'implémenter, j'ai pensé que!? Spring-context-support-5.1.8.RELEASE.jar avec JavaMailSender n'a pas JavaMailReciver. .. Pourquoi JavaMail lui-même peut-il recevoir? L'intégration Spring reçoit également du courrier, mais je n'avais pas envie de l'intégrer, j'ai donc décidé d'utiliser directement JavaMail. Cependant, je me suis demandé s'il y avait quelque chose de difficile à normaliser car il n'y a pas de réception de courrier dans Spring Framework qui englobe diverses implémentations et le rend facile à utiliser.
La logique de réception dans JavaMail n'était pas trop vigilante.
val props = Properties()
//Créer une session
val session = Session.getInstance(props)
//Sélectionnez le protocole
val store = session.getStore("imaps")
//Connecter au serveur
store.connect("outlook.office365.com", 993, "Meru adore", "Passwa-do")
//Sélectionnez un dossier
val folder = store.getFolder("INBOX")
folder.open(Folder.READ_ONLY)
//courrier entrant
folder.messages.map {
println(it.subject)
}
folder.close(false)
store.close()
Ensuite, javax.mail.AuthenticationFailedException: AUTHENTICATE a échoué lors de l'appel de la méthode store.connect. Si vous spécifiez session.debug = true et obtenez un journal détaillé
DEBUG: setDebug: JavaMail version 1.6.2
DEBUG: getProvider() returning javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle]
DEBUG IMAPS: mail.imap.fetchsize: 16384
DEBUG IMAPS: mail.imap.ignorebodystructuresize: false
DEBUG IMAPS: mail.imap.statuscachetimeout: 1000
DEBUG IMAPS: mail.imap.appendbuffersize: -1
DEBUG IMAPS: mail.imap.minidletime: 10
DEBUG IMAPS: closeFoldersOnStoreFailure
DEBUG IMAPS: trying to connect to host "outlook.office365.com", port 993, isSSL true
* OK The Microsoft Exchange IMAP4 service is ready.
A0 CAPABILITY
* CAPABILITY IMAP4 IMAP4rev1 AUTH=PLAIN AUTH=XOAUTH2 SASL-IR UIDPLUS ID UNSELECT CHILDREN IDLE NAMESPACE LITERAL+
A0 OK CAPABILITY completed.
DEBUG IMAPS: AUTH: PLAIN
DEBUG IMAPS: AUTH: XOAUTH2
DEBUG IMAPS: protocolConnect login, host=outlook.office365.com, user=Meru adore, password=<non-null>
DEBUG IMAPS: AUTHENTICATE PLAIN command trace suppressed
DEBUG IMAPS: AUTHENTICATE PLAIN command result: A1 NO AUTHENTICATE failed.
Quelque chose n'a pas réussi à s'authentifier? C'est le début de l'erreur. J'ai essayé le protocole pop3s et le numéro de port 995
DEBUG: setDebug: JavaMail version 1.6.2
DEBUG: getProvider() returning javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle]
DEBUG POP3: mail.pop3s.rsetbeforequit: false
DEBUG POP3: mail.pop3s.disabletop: false
DEBUG POP3: mail.pop3s.forgettopheaders: false
DEBUG POP3: mail.pop3s.cachewriteto: false
DEBUG POP3: mail.pop3s.filecache.enable: false
DEBUG POP3: mail.pop3s.keepmessagecontent: false
DEBUG POP3: mail.pop3s.starttls.enable: false
DEBUG POP3: mail.pop3s.starttls.required: false
DEBUG POP3: mail.pop3s.finalizecleanclose: false
DEBUG POP3: mail.pop3s.apop.enable: false
DEBUG POP3: mail.pop3s.disablecapa: false
DEBUG POP3: connecting to host "outlook.office365.com", port 995, isSSL true
+OK The Microsoft Exchange POP3 service is ready.
CAPA
+OK
TOP
UIDL
SASL PLAIN
USER
.
DEBUG POP3: authentication command trace suppressed
DEBUG POP3: authentication command failed
QUIT
+OK Microsoft Exchange Server POP3 server signing off.
Une fois que toutes les authentifications ont échoué. Si vous recherchez des informations sur le net, vous devrez vous authentifier avant @ au lieu de votre adresse e-mail, ou vous ne connaîtrez pas le domaine, donc Exchange qui est proxy ou redirigé vers outlook.office365.com J'ai répété des essais et des erreurs pendant environ une demi-journée, par exemple si je devais me connecter directement au serveur.
IMAP et POP3 ont été désactivés dans les paramètres de connexion de messagerie de l'utilisateur dans la console d'administration Exchange. Lorsque j'ai dû me connecter directement au serveur Exchange ci-dessus, j'ai demandé à un administrateur d'accéder à la console de gestion. Après tout, TCP / IP n'est pas passé directement, mais j'ai vu le document à ce moment. -et-imap4 / pop3-et-imap4) dit: "Par défaut, POP3 et IMAP4 sont activés pour tous les utilisateurs d'Exchange Online." Mais assurez-vous qu'ils peuvent être désactivés par utilisateur. Quand je l'ai vu, il était correctement désactivé. Je l'ai activé là-bas, et après un certain temps (5 à 10 minutes), cela a fonctionné sans problème!
Recommended Posts