MAIL_URL은 gmail을 쓸 경우 다음과 같이 설정하면 된다.
smtp://사용자계정%40gmail.com:계정암호@smtp.gmail.com:465/
혹은 google apps 계정은 경우
smtp://사용자계정%40구글Apps도메인:계정암호@smtp.gmail.com:465/
----
가입자 확인 메일 발송엔 몇가지 문제가 있는데
1. Text로 메일을 보낸다.
2. Formatted 형식을 사용할 수 없다.
이건 내가 생각해봐도 좀 아니다 싶다.
server 쪽에서 startup 할때 기존 Accounts.emailTemplate과 Accounts.sendVerificationEmail 등등이 제대로 작동하도록 바꿔치기 해주자.
:: email.coffee
Meteor.startup ->
# set Mail configuration
Email = Package.email.Email;
_.extend Accounts.emailTemplates,
from: "Gearlounge <no-reply@gearlounge.com>"
verifyEmail:
subject: (user)->
"#{"#{user.profile.displayName}님, "if (user.profile and user.profile.displayName)?}가입을 환영합니다."
html: (user, url)->
Handlebars.templates['verifyEmail'](
user: user.profile && user.profile.displayName
verifyEmailUrl: url
urlHome: Meteor.absoluteUrl()
)
# hack for handlebars-server
_.extend Accounts.sendVerificationEmail = (userId, address) ->
user = Meteor.users.findOne userId
throw new Error "Can't find user" if not user?
if not address?
email = _.find user.emails || [], (e) -> !e.verified
address = (email || {}).address
throw new Error "No such email address for user." if not address or not _.contains(_.pluck(user.emails || [], 'address'), address)
tokenRecord =
token: Random.id()
address: address
when: new Date()
Meteor.users.update
_id: userId
,
$push:
"services.email.verificationTokens": tokenRecord
verifyEmailUrl = Accounts.urls.verifyEmail tokenRecord.token
Email.send
to: address
from: Accounts.emailTemplates.from
subject: Accounts.emailTemplates.verifyEmail.subject user
html: Accounts.emailTemplates.verifyEmail.html user, verifyEmailUrl
return
위 코드는 기존 accounts-password.js의 Accounts.emailTemplates을 그대로 옮겨(물론 coffeescript로 바꾸긴 했지만) 놓은 수준이다.
하지만 노랑색으로 그어 놓은 부분이 변경한 부분인데 기존 Accounts.emailTemplates는 text밖에 사용할 수 없어서 html을 인자로 주었고 메일 양식도 하드코딩된 부분을 handlebars-server(https://github.com/EventedMind/meteor-handlebars-server) 패키지를 사용하여 양식화하였다.
html: (user, url)->
Handlebars.templates['verifyEmail'](
user: user.profile && user.profile.displayName
verifyEmailUrl: url
urlHome: Meteor.absoluteUrl()
)
위 코드에서 보듯 verifyEmail 이란 template 을 사용하는데 server쪽 디렉토리 아래 적당히 verifyEmail.handlebars 라는 파일을 생성하면 알아서 잘 찾는다.
은근 괜찮음 추천추천.
서버사이드 핸들바도 클라이언트처럼 쓰면 된다. user, verifyEmailUrl, urlHome 을 각각 인자로 사용하는데 이 세개를 handlebars에서도 똑같이 이용한다.
<div>
<img src="{{urlHome}}image/header.img">
</div>
<p>
안녕하세요. {{user}}님. 가입을 환영합니다.
</p>
<p>
사용자 확인을 위해 아래 링크를 클릭해주세요.
</p>
<p>
<a href="{{verifyEmailUrl}}" target="_blank">{{verifyEmailUrl}}</a>
</p>
이렇게 구성하면 오케이.
아마 verifyEmailUrl 은 아마도 http://localhost:3000/#/verify-email/HmfLCxjRKoRreqKWW 이런 형태일텐데
이제 이 경로로 오면 실제로 처리해주는 걸 만들어주면 되겠다.
클라이언트로 /verify-email/<token> 의 URL요청이 들어오면 처리하면 될텐데
내 경우엔 meteor-router(https://github.com/tmeasday/meteor-router) 패키지를 사용하므로
아래와 같이 구현했다.
Meteor.Router.add
위 코드는 기존 accounts-password.js의 Accounts.emailTemplates을 그대로 옮겨(물론 coffeescript로 바꾸긴 했지만) 놓은 수준이다.
하지만 노랑색으로 그어 놓은 부분이 변경한 부분인데 기존 Accounts.emailTemplates는 text밖에 사용할 수 없어서 html을 인자로 주었고 메일 양식도 하드코딩된 부분을 handlebars-server(https://github.com/EventedMind/meteor-handlebars-server) 패키지를 사용하여 양식화하였다.
html: (user, url)->
Handlebars.templates['verifyEmail'](
user: user.profile && user.profile.displayName
verifyEmailUrl: url
urlHome: Meteor.absoluteUrl()
)
위 코드에서 보듯 verifyEmail 이란 template 을 사용하는데 server쪽 디렉토리 아래 적당히 verifyEmail.handlebars 라는 파일을 생성하면 알아서 잘 찾는다.
은근 괜찮음 추천추천.
서버사이드 핸들바도 클라이언트처럼 쓰면 된다. user, verifyEmailUrl, urlHome 을 각각 인자로 사용하는데 이 세개를 handlebars에서도 똑같이 이용한다.
<div>
<img src="{{urlHome}}image/header.img">
</div>
<p>
안녕하세요. {{user}}님. 가입을 환영합니다.
</p>
<p>
사용자 확인을 위해 아래 링크를 클릭해주세요.
</p>
<p>
<a href="{{verifyEmailUrl}}" target="_blank">{{verifyEmailUrl}}</a>
</p>
이렇게 구성하면 오케이.
아마 verifyEmailUrl 은 아마도 http://localhost:3000/#/verify-email/HmfLCxjRKoRreqKWW 이런 형태일텐데
이제 이 경로로 오면 실제로 처리해주는 걸 만들어주면 되겠다.
클라이언트로 /verify-email/<token> 의 URL요청이 들어오면 처리하면 될텐데
내 경우엔 meteor-router(https://github.com/tmeasday/meteor-router) 패키지를 사용하므로
아래와 같이 구현했다.
Meteor.Router.add
....
'/verify-email/:token':(token)->
result = Meteor.call 'confirmEmail', token
'confirmMail'
token을 인자로 'confirmEmail' method를 호출하면 해당계정의 email의 verified가 true가 되면서 사용가능한 상태로 만들 수 있다. 그리고 confirmMail 템플릿으로 포워딩하는 것으로 마무리.
만일 싱글페이지 앱이라면 url 분석해서 처리하는 방법도 있겠다.
물론 인증이 필요한 부분에 필터링을 한다던가 하는 세세한 부분의 구현이 있지만 실제로 해보면서 확인해보자.
댓글
댓글 쓰기