알았다면 별거 아닌 Exchange Online은 Java Mail로 메일 수신에 푹 빠졌습니다.
12290 단어 ExchangeOnlineJava
개시하다
자바(Kotlin) 앱으로 Exchange 온라인과 메일을 주고받으며 간단하게 조사한 메일을 보내봤다.
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.ymlspring:
mail:
host: smtp.office365.com
port: 587
username: め〜るあどれす
password: ぱすわ〜ど
properties:
mail:
smtp:
starttls:
enable: true
Application.ktimport 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("宛先め〜るあどれす")
from = "め〜るあどれす"
subject = "けんめい"
text = "ほんぶん"
}
mailSender.send(mailMessage)
}
}
fun main( args: Array<String>) {
runApplication<Application>(*args)
}
날씨가 좀 안 좋아요...
메일을 보냈으니까 당연히 받을 수 있다고 여기저기 말하다가 긴급시행 단계!?자바 Mail Sender의spring-context-support-5.1.8이 있다고 생각합니다.RELEASE.jar에는 JavaMail Reciver가 없습니다.Java Mail은 왜 자기가 받을 수 있을까?스프링 integration에도 이메일이 접수됐지만, 특별히 편입할 뜻은 없어 자바메일을 직접 사용하기로 했다.
하지만 다양한 구현을 통해 쉽게 사용할 수 있도록 포장된 스프링 프레임워크는 이메일 수신이 없어 공통화하기 어려운 상황이 있다면 얘기해 주시겠어요?생각했어.
그리고 반했어요.
자바메일에서의 수신 논리였지만 그렇게 경계하지는 않았다.
val props = Properties()
// セッションを生成
val session = Session.getInstance(props)
// プロトコルを選択
val store = session.getStore("imaps")
// サーバに接続
store.connect("outlook.office365.com", 993, "め〜るあどれす", "ぱすわ〜ど")
// フォルダを選択
val folder = store.getFolder("INBOX")
folder.open(Folder.READ_ONLY)
// メール受信
folder.messages.map {
println(it.subject)
}
folder.close(false)
store.close()
그래서store.connect 방법의 호출에서javax를 사용합니다.mail.AUTHENTICATE failed가 발생합니다.session.debug = 진실 지정 및 자세한 로그 가져오기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=め〜るあどれす, password=<non-null>
DEBUG IMAPS: AUTHENTICATE PLAIN command trace suppressed
DEBUG IMAPS: AUTHENTICATE PLAIN command result: A1 NO AUTHENTICATE failed.
실패의 결말은 무엇입니까?이것이 바로 잃어버린 시작이다.프로토콜을 pop3s로 만들고 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.
역시 인증에 실패했습니다.따라서 인터넷에서 정보를 검색하면 메일주소가 아니라 @ 이전에 인증을 해야 하기 때문에 도메인을 판단할 수 없습니다.office365.인터넷 프록시 63?방향을 바꾸시겠습니까?등, 한나절 정도 시행착오를 반복했다.
대답하다.
Exchange Management Console에서 사용자의 메일 연결 설정으로 인해 IMAP 및 POP3이 잘못되었습니다.
위의 Exchange 서버에 직접 연결해야 하는 경우 관리자에게 관리 콘솔에 액세스하도록 요청하십시오.직접적인 결과 TCP/IP는 통과할 수 없지만 이때 보았다문서 "POP3과 IMAP4는 Exchange 온라인의 모든 사용자에게 유효해졌다."하지만 모든 사용자가 비활성화할 수 있다는 것을 확인했는데 결과는 완전히 무효화되었다.
그래서 효과화되어 잠시 후(5-10분) 원활하게 이동합니다!
Reference
이 문제에 관하여(알았다면 별거 아닌 Exchange Online은 Java Mail로 메일 수신에 푹 빠졌습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/megasys1968/items/f77ec7c0c1815ed0d1d8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)