2013-07-24 3 views

답변

29

예, 가능합니다.이 일반적인 문제에 대한 클라이언트 측 솔루션을 제공합니다.

먼저 귀하의 이메일 HTML 본문 역할을하는 간단한 템플릿을 정의해야합니다 :

<template name="shareEmailContent"> 
    <p>{{message}}</p> 
    <a href="{{url}}">{{title}}</a> 
</template> 

이 그럼 당신은 (Email.send at docs.meteor.com를 참조 Email.send을 사용할 수 있습니다, 당신은 이메일을 추가로 몇 가지 적절한 구성이 필요합니다 스마트 패키지 및 설정 MAIL_URL) 템플릿 렌더링 결과를 전자 메일로 보내십시오. Email.send는 서버에서만 작동하므로 클라이언트에서 호출 할 수있는 서버 메소드를 정의해야합니다.

서버 측 :

Meteor.methods({ 
    sendShareEmail:function(options){ 
    // you should probably validate options using check before actually 
    // sending email 
    check(options,{ 
     from:String, 
     // etc... 
    }); 
    Email.send(options); 
    } 
}); 

클라이언트 측 :

코멘트에서 언급 한 바와 같이
var dataContext={ 
    message:"You must see this, it's amazing !", 
    url:"http://myapp.com/content/amazingstuff", 
    title:"Amazing stuff, click me !" 
}; 
var html=Blaze.toHTMLWithData(Template.shareEmailContent,dataContext); 
var options={ 
    from:"[email protected]", 
    to:"[email protected]", 
    subject:"I want to share this with you !", 
    html:html 
    }) 
}; 
Meteor.call("sendShareEmail",options); 

, 당신은 또한 서버에서 이메일 템플릿을 렌더링하는 결정할 수 있습니다. 서버 측 렌더링은 아직 지원되지 않지만 타사 템플릿 패키지를 사용하여 수행 할 수 있습니다.

편집 2014년 6월 9일 : 유성 1.0

+0

템플릿은 클라이언트 측에서만 작동하므로 모든 사용자가 모든 이메일 템플릿을 볼 수있게하려는 경우이 방법이 유용합니다. – Diskdrive

+1

이메일 템플릿을 서버 측에서 생성하려면 (예를 들어)이 패키지를 사용해야합니다. https://github.com/EventedMind/meteor-handlebars-server – saimeunt

+1

예 그게 내가 한 일이야. 잘 했어! 하지만 메테오 (Meteor)에서 네이티브하게 지원 될 때 그래, 좋을 것입니다. – Diskdrive

4

유성 0.9.1의로 최신 Blaze API를 사용하도록 업데이트.

1.Install 유성 패키지 이메일 :

meteor add email

sendgrid에서

meteor add blaze

2.Create 이메일 계정하거나 얻을 SMTP 당신은 당신의 서버에서 템플릿 이메일을 보내려면 이메일 제공자의 매개 변수 나는 Gmail로 테스트하지 않았다. 하지만 센드 메일을 사용하면 힘들었습니다! /server/smtp.js에서

3.Configure SMTP 설정 :

Meteor.startup(
function(){ 
    process.env.MAIL_URL = 'smtp://<username>:<password>@smtp.sendgrid.net:587'; 
} 

); /client/template/my_template.html에서

myfunction(){ 
    var html = Blaze.toHTML(Blaze.With(data, function() { return Template.my_template; })); 
    Email.send({ 
      from: "My company name <[email protected]>", 
      to: "[email protected]", 
      subject: "Any subject...", 
      html: html 
     }); 
    } 

5.Create 템플릿 :

는 는

4.You는 당신의 server.js에를 사용할 수 있습니다

<template name="my_template"> 
    Hello <b>{{name}}</b> 
</template> 

공지 사항이 {{ name}} 여기서 data = {name : "John"}으로 정의 된 데이터에 정의 된 속성을 참조하십시오. 다음 템플릿은 "Hello John"으로 출력되며, 모든 html 태그는 변수 html에 저장됩니다.

6. 서버 코드에서 아무 곳이나 myfunction()을 호출하십시오. Et voilà! 전자 메일이 전송됩니다. 이메일을받지 못했다면 스팸 메일에 포함되지 않았는지 확인하십시오.

이 방법을 사용하려면 여전히 클라이언트 측에 템플릿이 있어야합니다.

+3

'Template'은 서버에 정의되어 있지 않습니까? – chug2k

+0

우리는 또한'Template is not defined'error를 서버에서 얻고 있습니다. –

+0

혹시 SSR 패키지를 설치하려하셨습니까? https://github.com/meteorhacks/meteor-ssr – rodrigocprates

2

허용 대답은 클라이언트 측 코드를 사용합니다. 이메일 템플릿을 만들려면 클라이언트 측 코드가 안전하지 않을 수 있습니다. 서버 측 렌더링 템플릿 용 패키지 (meteor-ssr)를 사용할 수 있습니다.