2012-05-08 13 views
21

Playframework 2.0 में, यह ईमेल भेजने के लिए उतना आसान प्रतीत नहीं होता है (Using sendmail as SMTP server in Play Framework पर टिप्पणियां देखें) जैसा कि यह Play 1.x में किया गया था। बॉक्स मेलर कार्यक्षमता से कोई बाहर नहीं है ... तो, मैं ईमेल कैसे भेजूं?Playframework 2.0 में ईमेल भेजना

उत्तर

29

Playframework 2.x को मेल के लिए एक प्लगइन की आवश्यकता है। इसे कोर में जोड़ा नहीं गया था क्योंकि डेवलपर्स को लगा कि ईमेल काम करने के लिए यह छोटा था, इसलिए फैसला किया कि प्लगइन बनाने के लिए बेहतर था। हालांकि, Google समूहों पर संदेशों के त्वरित झुकाव ने सुझाव दिया कि उन्हें गलत लगता है ... लोगों को प्ले 1.x के समान कार्यक्षमता की उम्मीद है।

जैसा कि आप समुदाय से अपेक्षा करते हैं, एक प्लगइन जल्दी से बनाया गया था। https://github.com/playframework/play-mailer देखें।

और भी देखने के लिए और अधिक प्लगइन होंगे, लेकिन यह कोर डेवलपर द्वारा समर्थित टाइपएफ़ है, इसलिए मुझे उम्मीद है कि यह सबसे अच्छा बनाए रखा जाए।

+2

2.0 के लिए प्लगइन की यह सूची आसान रही है - ध्यान दें कि इसे अस्थायी माना जाता है: https://github.com/playframework/Play20/wiki/Modules –

+0

@Codemwnci: मैं इस मॉड्यूल के माध्यम से देख रहा हूं अनुलग्नक समर्थन लेकिन यह या तो छुपा या अस्तित्व में प्रतीत होता है। युक्तियाँ? – Samo

+4

रीडमे में पथ गलत है - "com.typesafe"% "play-plugins-mailer_2.9.1"% "2.0.4" 'कोशिश करें। नोटिस '_2.9.1'। – Trick

2

मैंने संलग्नक के लिए समर्थन के साथ प्लगइन को जल्दी से हैक किया, क्योंकि अब तक का उल्लेख @ कोडमेन्सी के पास नहीं है। You can check it out

14

स्वीकृत उत्तर यह है कि Play को ई-मेल भेजने के लिए प्लगइन की आवश्यकता होती है। यह गलत है। आप अपने Play ऐप के लिए आसानी से किसी भी JVM मेलिंग लाइब्रेरी को अनुकूलित कर सकते हैं। यहां अपाचे कॉमन्स ईमेल का उपयोग करके एक उदाहरण दिया गया है, जो here से सादगी के लिए अनुकूलित किया गया है और हमारा अपना उत्पादन कोड है।

import org.apache.commons.mail._ 
import scala.util.Try 

private val emailHost = Play.configuration.getString("email.host").get 

/** 
* Sends an email 
* @return Whether sending the email was a success 
*/ 
def sendMail(from: (String, String), // (email -> name) 
      to: Seq[String], 
      cc: Seq[String] = Seq.empty, 
      bcc: Seq[String] = Seq.empty, 
      subject: String, 
      message: String, 
      richMessage: Option[String] = None, 
      attachment: Option[java.io.File] = None) = { 

    val commonsMail: Email = if(mail.attachment.isDefined) { 
     val attachment = new EmailAttachment() 
     attachment.setPath(mail.attachment.get.getAbsolutePath) 
     attachment.setDisposition(EmailAttachment.ATTACHMENT) 
     attachment.setName("screenshot.png") 
     new MultiPartEmail().attach(attachment).setMsg(mail.message) 
    } else if(mail.richMessage.isDefined) { 
     new HtmlEmail().setHtmlMsg(mail.richMessage.get).setTextMsg(mail.message) 
    } else { 
     new SimpleEmail().setMsg(mail.message) 
    } 
    } 

    commonsMail.setHostName(emailHost) 

    to.foreach(commonsMail.addTo(_)) 
    cc.foreach(commonsMail.addCc(_)) 
    bcc.foreach(commonsMail.addBcc(_)) 

    val preparedMail = commonsMail. 
    setFrom(mail.from._2, mail.from._1). 
    setSubject(mail.subject) 

    // Send the email and check for exceptions 
    Try(preparedMail.send).isSuccess 
} 

def sendMailAsync(...) = Future(sendMail(...)) 

यह देखते हुए कि ई-मेल भेजने में इतनी आसानी से पूरा किया जाता है, मुझे आश्चर्य है कि प्लगइन की सिफारिश की जाती है। यदि आप Play संस्करणों को अपग्रेड करना चाहते हैं, तो प्लगइन के आधार पर आपको चोट पहुंच सकती है, और मुझे ऐसा कुछ नहीं लगता है जो 30 लोसी लेता है, इसे पूरा करने के लिए इसके लायक है। हमारे कोड ने Play 2.0 से 2.1 से 2.2 तक अपरिवर्तित अपग्रेड किया है।

संबंधित मुद्दे