# Mailjet으로 인증을 시도하는데, txt 파일 또는 DNS 레코드가 필요합니다

**URL:** https://meta.discourse.org/t/trying-to-validate-with-mailjet-needs-txt-file-or-dns-entry/138508
**Category:** Self-hosting
**Created:** [1월 14, 2020, 12:52오전 UTC](https://meta.discourse.org/t/trying-to-validate-with-mailjet-needs-txt-file-or-dns-entry/138508 "2020-01-14T00:52:59Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![ctmoore](https://avatars.discourse-cdn.com/v4/letter/c/dec6dc/32.png) [@ctmoore](https://meta.discourse.org/u/ctmoore)
#### Post date: [1월 14, 2020, 12:52오전 UTC](https://meta.discourse.org/t/trying-to-validate-with-mailjet-needs-txt-file-or-dns-entry/138508/1 "2020-01-14T00:52:59Z")

</div>

네, 그래서 저는 SMTP에 Mailjet을 사용 중인데, 인증 과정에서 문제가 발생하고 있습니다. 먼저, 개별 이메일 주소인 [noreply@discourse.example.com을](mailto:noreply@discourse.example.xn--com-of0o) 쉽게 인증할 수 없습니다.

대신 [discourse.example.com](http://discourse.example.com) 도메인을 인증하는 편이 좋겠는데, 여기에서 두 가지 문제에 부딪힙니다. 특수한 이름의 텍스트 파일을 사용하면 가능해 보이지만, Discourse에서는 이것이 허용되지 않는 것 같습니다(지금 시점에서는 nginx 설정 파일을 수정해 해당 URL에 대해 무언가를 반환하도록 하는 유혹이 꽤 강합니다). 좋습니다, 그렇다면 DNS TXT 파일은 어떨까요? 그런데 여기서 또 문제가 생깁니다. 저는 [example.com](http://example.com) 도메인의 DNS를 관리하고 있는데, Mailjet은 사실상 mailjet.discourse.example.com이라는 서브도메인에 항목을 입력하라고 요구하고 있습니다. 어떻게 입력해야 할지 명확하지 않습니다. 저는 Ubuntu 16.04에서 Bind 9.3 정도를 사용 중인데, 몇 가지 지침이 있으면 도움이 될 것 같습니다. discourse.example.com에 TXT 항목을 추가하는 방법은 찾을 수 있지만, Mailjet은 그건 안 되고 반드시 mailjet\_xxxxx.discourse.example.com, 즉 서브도메인이어야 한다고 합니다. 이건 추가 존(zone)이 필요하다는 뜻인 것 같습니다. 저는 DNS 전문가가 아니지만 복잡한 것을 설치하는 데는 꽤 능숙합니다.

하지만 지금은 온갖 시도를 해보느라 완전히 혼란스러워서… 도움을 구합니다. 즉, 가장 좋은 소식은 누군가가 "물론 Discourse 루트 디렉토리에 이렇게 텍스트 파일을 넣을 수 있습니다"라고 말해 주는 것일 텐데… ☹

---

<div class="post-metadata">

### Author: ![itsbhanusharma](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/itsbhanusharma/32/180717_2.png) [@itsbhanusharma](https://meta.discourse.org/u/itsbhanusharma)
#### Post date: [1월 14, 2020, 6:56오전 UTC](https://meta.discourse.org/t/trying-to-validate-with-mailjet-needs-txt-file-or-dns-entry/138508/2 "2020-01-14T06:56:47Z")

</div>

도메인 등록 기관이나 DNS 관리자를 알고 계신가요?

등록 기관에서 제공하는 DNS 관리자에서 DNS 항목을 생성해야 하며, Cloudflare과 같은 서비스를 사용하는 경우 해당 서비스에서 DNS 레코드를 생성해야 합니다.

---

<div class="post-metadata">

### Author: ![tpetrov](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tpetrov/32/164643_2.png) [@tpetrov](https://meta.discourse.org/u/tpetrov)
#### Post date: [1월 14, 2020, 10:28오전 UTC](https://meta.discourse.org/t/trying-to-validate-with-mailjet-needs-txt-file-or-dns-entry/138508/3 "2020-01-14T10:28:37Z")

</div>

최근에 같은 문제를 겪었습니다. 이렇게 해결했습니다:

> [@codinghorhor](#):
>
> ## 이메일 도메인이 올바른가요?
> 
> 기본 발신자 이메일 주소는 설치 도메인과 서브도메인을 기반으로 합니다. 따라서 URL이 `discourse.example.com`인 경우 다음과 같습니다:
> 
> `noreply@discourse.example.com`
> 
> 하지만 메일 제공업체가 다음을 기대하고 있다면:
> 
> `noreply@example.com`
> 
> … 문제가 발생할 수 있습니다! 이를 우회하려면 `app.yml` 파일에서 다음 줄을 편집하고 주석 해제하세요.
> 
> ```plaintext
> ## 첫 번째 가입 시 'From' 이메일 주소를 설정하려면 주석을 해제하고 변경하세요:
> #- exec: rails r "SiteSetting.notification_email='noreply@example.com'"
> ## 첫 번째 가입 이메일을 받은 후 해당 줄을 다시 주석 처리하세요. 한 번만 실행하면 됩니다.
> 
> ```
> 
> 위 줄의 주석을 해제하고 필요한 대로 발신자 이메일 주소를 설정한 후 재빌드(rebuild)를 실행해야 합니다.
> 
> 필요한 경우 명령줄에서도 변경할 수 있습니다:
> 
> ```plaintext
> ./launcher enter app
> rails r "SiteSetting.notification_email = 'discourse@yoursite.com'"
> exit
> 
> ```

---

<div class="post-metadata">

### Author: ![ctmoore](https://avatars.discourse-cdn.com/v4/letter/c/dec6dc/32.png) [@ctmoore](https://meta.discourse.org/u/ctmoore)
#### Post date: [1월 14, 2020, 5:16오후 UTC](https://meta.discourse.org/t/trying-to-validate-with-mailjet-needs-txt-file-or-dns-entry/138508/5 "2020-01-14T17:16:25Z")

</div>

자, 마침내 TXT 검증 방법을 성공적으로 작동시켰습니다. Discourse의 "제한 사항"이 있더라도 말이죠. DNS 관련 설정을 만지는 것을 피하고 싶다면 이 방법을 사용하세요. (에에에에에에… 제 경우에는 웹서버 설정을 만지는 것보다 DNS를 건드리는 쪽이 훨씬 더 무섭습니다. 물론 사람마다 다를 수 있겠지만요.)

이 방법을 사용하려면 Discourse 설치 환경에서 nginx 설정 파일을 편집할 수 있어야 합니다. 설정 파일의 위치는 Discourse를 어디에, 그리고 어떤 방식으로 설치했는지에 따라 달라집니다. 제 경우에는 Docker 없이 베어메탈로 설치했는데, /etc/nginx/conf.d/discourse.conf 경로에서 찾을 수 있었습니다 – 역시 여기는 사람마다 다를 수 있습니다.

해당 파일에는 다음과 같은 location 블록이 있을 것입니다:

```
 location / {
     ....
 }

```

여기에는 내부적으로 중첩된 여러 location 지시문도 포함되어 있을 것입니다.

새로운 location 블록을 하나 생성하세요. 위 블록 안에 중첩되도록 하되(다른 어떤 location 블록 안에는 넣지 마세요!):

```
location /stupidfilename.txt {
   alias /var/www/stupidfilename.txt;
}

```

여기서 stupidfilename.txt는 상대방이 요청한 특수한 이름의 파일이며, 경로(/var/www)는 Discourse 관련 파일들 바깥에 있으면서도 서버의 일반적인 URL 접근이 가능한 위치여야 합니다. 이 방식이 작동하는 이유는 /가 **Discourse** 의 루트이기 때문에, URL이 Discourse 아래에 있는 것처럼 http:/ /discourse.example.com/stupidfilename.txt 형태로 보이기 때문입니다. (잘못된 링크 생성을 방지하기 위해 공백을 추가했습니다)

즉… 파일을 Discourse 바깥에 배치하고, 해당 파일을 가리키도록 location을 alias로 설정한 후 nginx를 재시작하세요.

짜잔…

(해결책으로 표시했기 때문에 가독성 등을 위해 이 답변을 나중에 수정했습니다)

---

<div class="post-metadata">

### Author: ![dandv](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/dandv/32/169779_2.png) [@dandv](https://meta.discourse.org/u/dandv)
#### Post date: [2월 11, 2020, 3:14오전 UTC](https://meta.discourse.org/t/trying-to-validate-with-mailjet-needs-txt-file-or-dns-entry/138508/6 "2020-02-11T03:14:03Z")

</div>

> [@ctmoore](#):
>
> 나에게는 웹서버를 만지는 것보다 훨씬 더 무섭습니다.

[공개적으로 접근 가능한 Docker 파일을 생성하는 것](https://meta.discourse.org/t/uploading-a-file-to-the-web-root/35626/26?u=dandv)에 비하면 TXT 레코드를 만드는 것은 매우 쉬운 일입니다.

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [3월 12, 2020, 3:20오전 UTC](https://meta.discourse.org/t/trying-to-validate-with-mailjet-needs-txt-file-or-dns-entry/138508/7 "2020-03-12T03:20:52Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
