알았다면 별거 아닌 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.yml
spring:
  mail:
    host: smtp.office365.com
    port: 587
    username: め〜るあどれす
    password: ぱすわ〜ど
    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("宛先め〜るあどれす")
      from = "め〜るあどれす"
      subject = "けんめい"
      text = "ほんぶん"
    }
    mailSender.send(mailMessage)
  }
}

fun main( args: Array<String>) {
  runApplication<Application>(*args)
}
  • 지금까지 메이븐 전공이었지만 그로비가 아닌 코틀린이 쓸 수 있어 그래델에 도전하고 있다.그래서 기술 내용의 최적화에 자신이 없다.앞으로도 그레이드(Gradle)를 적극적으로 활용할 계획이지만 마븐보다 이해가 더 쉽다는 말을 들을 때도 있지만, 자유도가 높아 이해하기 어려운 상황이다.
  • 속성 메일.smtp.ssl.만약 사실이라면,javax.net.ssl.SSL Exception: Unsuported or unrecognized SSL 메시지가 발생하므로 참조여기.했습니다.mail.smtp.auth가 없어도 디버깅 로그 운동은 나쁘지 않다.
  • 이렇게 간단하게 메일을 보냈기 때문에 Exchange 온라인이라고 해도 그냥 평범한 것일까?나는 메일 서버와 마찬가지로 수신도 매우 간단하다고 생각한다.결국 그렇긴 하지만 중간에 넘어지면 의심에 휩싸여 이리저리 헤매게 된다.

    날씨가 좀 안 좋아요...


    메일을 보냈으니까 당연히 받을 수 있다고 여기저기 말하다가 긴급시행 단계!?자바 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분) 원활하게 이동합니다!

    좋은 웹페이지 즐겨찾기