즉, openssl 테스트는 성공하지만 discourse-doctor가 실행하는 연결 테스트가 해당 설정을 사용해도 여전히 실패한다면 다음 단계는 무엇일까요? openssl 테스트는 성공하지만, 내 Discourse 연결은 504 5.7.4 Unrecognized authentication type… 오류로 계속 실패합니다. 아마도 LOGIN 인증 방식을 인식하지 못하는 것 같습니다. app.yml 파일에 DISCOURSE_SMTP_AUTHENTICATION: login을 추가해 보았지만, 문제가 해결되지 않았습니다.
참고로, 제가 찾은 내용을 공유합니다. docker 이미지 안에 들어가서 lib/tasks/emails.rake 스크립트와 config/discourse.conf 파일을 이것저것 만져보았습니다. 몇 시간 동안 smtp.office365.com과 .mail.protection.outlook.com의 AUTH login과 AUTH plain 조합을 모두 시도해 본 끝에, SMTP 시작 부분 위에 있는 주석 처리된 블록을 활성화했습니다.
# We would like to do this, but Net::SMTP errors out using starttls
#Net::SMTP.start(smtp[:address], smtp[:port]) do |s|
# s.starttls if !!smtp[:enable_starttls_auto] && s.capable_starttls?
# s.auth_login(smtp[:user_name], smtp[:password])
#end
이대로 실행하니 읽기 시간 초과(read timeout) 오류가 발생했습니다.
아래처럼 수정하여 start 대신 new를 호출하자 전송에 성공했습니다.
Net::STMP.new(smtp[:address], smtp[:port]) do |s|
s.enable_starttls
s.auth_login(smtp[:user_name], smtp[:password])
end
저는 Ruby, rake 등을 처음 접해 보는 입장입니다. 왜 이것이 작동하는지, 혹은 일반적인 경우에 '좋은 방법’인지 설명할 수는 없습니다.
J.
저는 이메일 전송 서비스로 socketlabs.com을 사용하며, 비슷한 문제를 겪었습니다. 제 경우 해결 방법은 lib/tasks/emails.rake 파일을 다음과 같이 수정하는 것이었습니다.
다음 줄을 변경하세요: Net::SMTP.start(smtp[:address], smtp[:port], 'localhost', smtp[:user_name], smtp[:password])
아래와 같이: Net::SMTP.start(smtp[:address], smtp[:port], 'localhost', smtp[:user_name], smtp[:password], smtp[:authentication])
이 변경이 없으면 DISCOURSE_SMTP_AUTHENTICATION: login이 하위 SMTP 코드로 전달되지 않습니다.
수정된 코드가 다른 인증 방식에서도 여전히 작동하는지는 테스트해 보지 않았지만, login 인증 방식에 대해서는 문제를 해결해 줍니다.
이 문제에 대한 일반적인 업데이트를 드리자면, MS는 SMTP 및 POP3에 대한 레거시 인증을 제거하는 과정을 진행 중입니다. 이는 O365를 메일 제공업체로 사용하는 경우 문제를 복잡하게 만들 수 있습니다. 현재 기본적으로 적용되는 정책은 SMTP AUTH를 금지하는 것이며, 이를 사용하려면 메일박스별로 활성화해야 합니다. 이 정보가 도움이 되길 바랍니다. 저는 어제 오전에 이 문제로 고생했거든요.
특히 POP의 경우 정말 아쉬운 부분입니다. Discourse가 수신 메일박스에 대한 IMAP 지원을 추가하지 않는 한, 수신 메일 설정이 훨씬 어려워질 것이기 때문입니다.