2013-09-30 15 views
0

我想創建一個窗體在web2py發送郵件到提交電子郵件帳戶 主要是我用SQLFORM.factory創建窗體然後我使用gluon.tools導入郵件導入發送電子郵件功能。我已經設置了我能想到的所有東西,但仍然在web2py中運行此代碼,它會發出「未能發送電子郵件抱歉」的提示。我想發送電子郵件使用web2py與Gmail和使用smtp設置我已附加所有代碼

from gluon.tools import Mail 
mail = Mail() 

mail.settings.server = '[email protected]:465' 
mail.settings.sender = '[email protected]' 
mail.settings.login = '[email protected]:secret' 




def index(): 

    form = SQLFORM.factory(
    Field('name', requires=IS_NOT_EMPTY()), 
    Field('email', requires =[ IS_EMAIL(error_message='invalid email!'), IS_NOT_EMPTY() ]), 
    Field('subject', requires=IS_NOT_EMPTY()), 
    Field('message', requires=IS_NOT_EMPTY(), type='text') 
    ) 
    if form.process().accepted: 
     session.name = form.vars.name 
     session.email = form.vars.email 
     session.subject = form.vars.subject 
     session.message = form.vars.message 

     x = mail.send(to=['[email protected]'], 
      subject='project minerva', 
      message= "Hello this is an email send from minerva.com from contact us form.\nName:"+ session.name+" \nEmail : " + session.email +"\nSubject : "+session.subject +"\nMessage : "+session.message+ ".\n " 
     ) 

     if x == True: 
      response.flash = 'email sent sucessfully.' 
     else: 
      response.flash = 'fail to send email sorry!' 

     #response.flash = 'form accepted.' 
    elif form.errors: 
     response.flash='form has errors.' 

    return dict(form=form) 

回答

2

使用mail.send()之前,我會推薦給測試,如果郵件設置正確:

if form.process().accepted: 
    session.name = form.vars.name 
    session.email = form.vars.email 
    session.subject = form.vars.subject 
    session.message = form.vars.message 
    if mail: 
     if mail.send(to=['[email protected]'], 
      subject='project minerva', 
      message= "Hello this is an email send from minerva.com from contact us form.\nName:"+ session.name+" \nEmail : " + session.email +"\nSubject : "+session.subject +"\nMessage : "+session.message+ ".\n " 
     ): 
      response.flash = 'email sent sucessfully.' 
     else: 
      response.flash = 'fail to send email sorry!' 
    else: 
     response.flash = 'Unable to send the email : email parameters not defined' 
elif form.errors: 
     response.flash='form has errors.' 

然後嘗試改變:

mail.settings.server = '[email protected]:465' 

mail.settings.server = 'smtp.gmail.com:465' 

mail.settings.server = 'smtp.gmail.com:587' 
1

我通過Gmail從Web2Py發送電子郵件(「無法發送電子郵件」)遇到的所有問題都是由我的gmail帳戶啓用的兩步身份驗證引起的。

爲了web2py會成爲能夠通過Gmail發送電子郵件:

  1. 閱讀谷歌說明在https://support.google.com/mail/answer/1173270?hl=en
  2. 當您的Gmail帳戶登錄,去https://security.google.com/settings/security/apppasswords?pli=1並進入僅一次PWD谷歌提供您打算允許使用Gmail服務的應用程序(我已經提到過「Web2Py」)
  3. 在定義郵件服務的模型中 - 使用上面提到的新pwd在W2P書中推薦的內容 - 作品!

NeoToren

0

我的電子郵件使用Gmail與此設置的修改:

mail.settings.server = 'smtp.gmail.com' 
0

對於發現他們的郵件設置,其他任何人遇到的問題,這裏有一個強力的方法:

也可在此gist

代碼:

''' 
Place this in a controller and call it, either by url or directly from code. 
An email(or multiple) with the correct settings will be sent to the 
test address. 
''' 
def test_mail(): 
    bases = ['yourdomain.com', 'yourhosting.company.net'] 
    prefixes = ['smtp.', 'mail.', ''] 
    ports = [':25' ':465', ':993', ':587', ''] 
    sender = '[email protected]' 
    login = '[email protected]:password' 
    send_test_to = '[email protected]' 
    count = 0 
    mail.settings.tls = True #Here so you can set to False if things fail? 
    for base in bases: 
     for prefix in prefixes: 
      for port in ports: 
       server = '{0}{1}{2}'.format(prefix, base, port) 
        msg = 'server: {0} login: {1}'.format(server, login) 
        # So you can correlate with error codes. Note some servers don't like print! 
        print msg 
        mail.settings.server = server 
        mail.settings.sender = sender 
        mail.settings.login = login 
        mail.send(to=[send_test_to], 
         subject='hello', 
         reply_to='[email protected]', 
         message=msg 
         ) 
        count += 1 
    return dict(message="tried {0} combinations".format(count)) 
相關問題