Computer >> 컴퓨터 >  >> 프로그래밍 >> Ruby

Rails Action Mailbox를 사용한 인바운드 이메일 통합 및 문제 해결 마스터하기

이메일 보내기 및 받기와 관련된 RFC(의견 요청)를 살펴본 적이 있다면 이메일 받은 편지함에서 보내기를 누를 때 기술적인 문제가 발생한다는 것을 알 수 있습니다.

다행히 기존의 많은 도구는 관리하는 Postfix 서버부터 SendGrid, Amazon SES 또는 Postmark와 같이 완전히 확장 가능한 전송 서비스에 이르기까지 개발자에게 SMTP(Simple Mail Transfer Protocol) 서비스를 제공합니다. 그러나 배송 가능성이나 가격상의 이유로 공급자 간에 이동한다는 것은 각 서비스의 특성에 맞게 앱을 다시 작성하거나 리팩터링하는 것을 의미합니다.

Rails는 Action Mailbox를 제공하여 우리를 도와줍니다. 이 게시물에서는 Action Mailbox를 사용하여 수신 이메일을 통합하고 문제를 해결하는 방법에 대해 자세히 알아보겠습니다.

하지만 먼저 Action Mailbox가 무엇인지 빠르게 정의해 보겠습니다.

Rails용 액션 메일박스란 무엇인가요?

Action Mailbox는 Ruby on Rails에서 이메일 수신을 위해 개념적 압축을 사용합니다. 개념적 압축은 모든 SMTP 서비스 간의 작은 차이점을 모두 캡슐화하고 인바운드 처리 코드를 한 번만 작성한다는 의미입니다. 새로운 서비스에 대한 공급자를 작성할 수도 있습니다.

ActionMailbox의 핵심 개념은 이메일 수신자를 기반으로 한 라우팅입니다. 인바운드 이메일 공급자를 설정하면 도메인으로 가는 메일이 앱으로 라우팅됩니다. 수신자 주소를 보고 각 메일 메시지가 어떻게 처리되어야 하는지 결정할 수 있습니다.

다음과 같이 Rails Conductor 작업을 통해 테스트 이메일을 보내면:

Rails Action Mailbox를 사용한 인바운드 이메일 통합 및 문제 해결 마스터하기

그러면 수신 이메일의 수신자는 To가 됩니다. , CC , BCCX-Original-To 필드.

 

각 주소를 테스트하여 어디로 라우팅할지 결정하지만 메일 메시지는 한 번만 라우팅됩니다.

개발의 주요 측면 중 하나는 실제로 시스템에서 이메일을 테스트하는 것입니다. Rails에는 /rails/conductor/ 경로 아래에 개발 페이지 세트가 있습니다. 개발 설정에 로컬로 이메일을 입력할 수 있습니다.

위의 예에서처럼 이메일을 수동으로 입력하거나 모든 헤더가 포함된 이메일을 업로드할 수 있습니다.

완전한 이메일(헤더, 메시지 본문, 첨부 파일 포함)을 얻는 가장 좋은 방법은 Thunderbird와 같은 이메일 클라이언트를 사용하는 것입니다. 개별 이메일을 .eml에 저장하세요. , 텍스트 편집기로 파일을 열고 전체 내용을 지휘자 페이지에 복사하세요.

이제 더 복잡한 이메일 처리를 테스트할 수 있습니다.

Rails 앱용 데모 게시 및 댓글 달기

이 모든 것이 어떻게 작동하는지 보여주기 위해 작은 데모를 만들어 보겠습니다. 저는 37Signals를 매우 좋아하며, 특히 Hey World의 블로그 활동을 좋아합니다. 하지만 댓글은 허용되지 않으므로 각 블로그 게시물에 대한 댓글을 포함하는 복제본을 만들어 보겠습니다.

이 게시물의 코드를 따라해보세요.

새 앱을 만듭니다. 저는 Tailwind CSS를 사용하고 있지만 자신에게 적합한 것을 선택하실 수 있습니다. Post에 대한 작업 텍스트도 추가하겠습니다. 및 Comment 모델.

 

스캐폴딩은 게시물과 댓글을 빠르게 볼 수 있는 방법을 제공합니다. post.rb에 연결을 추가하세요. , 게시물에 관련 댓글이 표시됩니다:

 

posts/_post.html.erb에서 , 댓글 부분을 추가해 보겠습니다.

 

이제 희소한 게시물과 댓글 보기가 생겼습니다. 블로그에 게시할 수신 이메일을 설정하세요:

 

그러면 ApplicationMailbox가 생성됩니다. . blog@에 대한 모든 것이 가능하도록 경로를 설정하겠습니다. 우편함으로 가서 게시물을 작성하세요.

 

http://localhost:3000/rails/conductor/action_mailbox/inbound_emails로 이동하여 빠르게 테스트할 수 있습니다. 귀하의 서비스에 이메일을 보내십시오. blog@whatever.com으로 무언가를 보내면 , 이메일은 앱의 받은 편지함으로 전달되어야 합니다. 다른 주소로 이메일을 보내면 메시지가 반송됩니다.

우편함으로 이메일 받기

이메일을 받아 블로그에 게시할 수 있도록 Post Mailbox를 설정해 보겠습니다. 각 사서함은 원본 inbound_email에 액세스할 수 있습니다. 및 mail 객체. InboundEmail은 mail 주위의 래퍼입니다. 레일 전반에 걸쳐 사용되는 클래스입니다.

우리의 목적을 위해 우리는 이메일의 발신자, 제목, 본문에 관심이 있습니다. 이를 추출하여 Post을 만들 수 있습니다. 우리 블로그 첫 페이지에 나타날 기록입니다.

 

블로그 주소로 다른 이메일을 보낸 다음 색인 페이지를 새로 고치세요. 게시물을 보셔야 합니다!

이제 게시물에 댓글을 추가해 보겠습니다. 첫째, 이메일 댓글 작성자는 이메일을 보낼 때 올바른 게시물을 참조해야 합니다. 이를 수행하는 간단한 방법은 수신 이메일 주소(예:comment+123@whatever.com)에 게시물 ID를 인코딩하는 것입니다. , 여기서 이메일 주소의 123은 Post 요소를 나타냅니다.

CommentMailbox 생성 :

 

Action Mailbox에 경로를 추가하여 comment+123가 포함된 이메일을 보내세요. CommentMailbox로 :

 

_post.html.erb에서 , 이메일 주소를 생성하는 링크를 추가하면 다른 사람이 이메일 앱을 열고 이메일을 보낼 수 있습니다.

 

수신 이메일은 CommentMailbox로 라우팅됩니다. 올바른 블로그 게시물에 첨부된 댓글로 분석되었습니다.

 

process 메소드는 이메일 본문과 보낸 사람 이메일에서 댓글을 생성합니다. Post을 참조합니다. post에서 쿼리됨 방법. 이 방법은 첫 번째 수신자의 이메일 주소를 가져오고 정규식을 사용하여 게시물 ID를 가져옵니다.

Post인 경우 존재하지 않거나 토큰을 구문 분석할 수 없는 경우 이메일이 반송되어 처리가 중지됩니다.

이제 Rails 지휘자 양식으로 이동하여 각 게시물의 주소에 댓글을 보내세요. 댓글은 색인 페이지의 게시물 아래에 표시됩니다!

Action Mailbox를 사용한 보다 복잡한 예

이메일은 실제로 매우 복잡합니다. 애플리케이션 모니터링 도구가 설정되어 있고 이와 같은 것을 앱에 배포했는데 APM 대시보드에 오류가 표시되기 시작했다고 가정해 보세요.

구문 분석 오류가 나타나거나 게시물/댓글에 이상한 형식 오류가 많이 있을 수 있습니다.

귀하의 앱은 HTML 이메일을 받고 원시 본문 소스를 가져와 웹사이트에 게시합니다. 메일 gem을 사용하면 수신 이메일에 HTML 본문이 있는지 확인하고 메시지에서 필요한 부분을 가져올 수 있습니다.

CommentMailbox을 변경해 보겠습니다. 및 PostMailbox 여러 부분으로 구성된 이메일을 확인하고 HTML 부분을 꺼내고, 남은 것이 있다면 텍스트로 다시 돌아가세요.

각 이메일에는 부분이 없거나 여러 부분이 있습니다. HTML 부분이 있는지 확인해서 사용하고, 없으면 텍스트 부분을 가져와서 사용해 보는 것이 선호되는 순서입니다. 구문 분석된 HTML 또는 텍스트 섹션이 없으면 이전과 같이 이메일 본문을 사용합니다.

PostMailbox 이제 조금 더 복잡해졌습니다:

 

CommentMailbox 처리 방법도 다릅니다:

 

이제 다른 사람의 휴대폰에서 오는 이메일을 처리할 수 있습니다.

Rails 앱에 액션 메일박스 추가하기

Action Mailbox 덕분에 이메일을 Rails 앱의 또 다른 I/O 경로로 고려할 수 있습니다. 개념적 압축을 사용하여 이메일 서비스 제공업체와 독립적으로 코드를 작성할 수 있습니다. 기본 인프라에 대해 걱정할 필요가 없기 때문에 최소한의 작업으로 이메일 제공업체를 이동할 수도 있었습니다.

AppSignal과 같은 APM 도구는 모든 발신 ActionMailer를 모니터링하고 전달 가능성을 감시할 수 있는 편리한 대시보드도 제공합니다.

다음은 많은 이메일을 보내고 받는 내 앱 중 하나를 보여주는 예입니다.

Rails Action Mailbox를 사용한 인바운드 이메일 통합 및 문제 해결 마스터하기

이를 통해 앱 내부에서 무슨 일이 일어나고 있는지 더 잘 알 수 있습니다.

마무리

이 게시물에서 우리는 먼저 Action Mailer for Rails의 기능을 정의했습니다. 그런 다음 수신 이메일을 통합하고 분석하여 블로그 게시물을 작성하는 데모 프로젝트를 설정했습니다.

이 정보가 도움이 되었기를 바랍니다. 즐거운 코딩 되세요!

추신 Ruby Magic 게시물이 보도되는 즉시 읽으려면 Ruby Magic 뉴스레터를 구독하고 단 하나의 게시물도 놓치지 마세요!

Rails Action Mailbox를 사용한 인바운드 이메일 통합 및 문제 해결 마스터하기

존 비티

우리의 객원 저자인 John은 2010년에 iPhone 앱용 API를 구축하기 위해 Rails를 배웠고 지금까지 뒤돌아보지 않았습니다. 그는 현재 고등학생들에게 프로그래밍을 가르치고 있으며 학교용 맞춤형 소프트웨어를 구축하고 블로그를 운영하고 있습니다.

John Beatty의 모든 기사