2015-01-16 60 views
0

我正在使用SendGrid從基於python的Heroku應用程序發送電子郵件。我可以花費10分鐘左右到達收件箱,但我收到了三封郵件我無法弄清楚爲什麼。下面是相關代碼:SendGrid發送多份副本

import sendgrid 
from sendgrid import SendGridError, SendGridClientError, SendGridServerError 
sg = sendgrid.SendGridClient('[email protected]', 'xxx') 
message = sendgrid.Mail() 
message.add_to('John Doe <[email protected]>') 
message.set_subject('Example') 
message.set_html('Body') 
message.set_text('Body') 
message.set_from('Dark Knight <[email protected]>') 
message.add_attachment('image.jpg', './image.jpg') 
status, msg = sg.send(message) 
@app.route('/test2') 
def test2(): 
    sg.send(message) 
    return "sent" 

當我去我得到「發送」相關的路線返回,並且發送電子郵件,但再次,它發出三份。我不知道爲什麼。任何幫助都會很棒。

+0

我從bash運行它時遇到同樣的問題。 –

+0

你有's.send(message)'兩次,你在bash中運行什麼? – elyase

+0

腳本,我不確定是否因爲heroku頁面加載而被多次調用。 –

回答

0

電子郵件一和二: status, msg = sg.send(message)將發送兩封電子郵件,然後將statusmsg設置爲響應對象。

電子郵件三:加載路由後sg.send(message)發送下一封電子郵件。

0

我建議你使用sendgrid sendmail api發送郵件。其高效,快速的方式發送電子郵件。

0

您在代碼中三次打電話給sg.send(message)

它在這裏被調用兩次:status, msg = sg.send(message) - 這將發送一個郵件給status並記錄它對該變量的響應。然後它會再次發送msg並記錄它對該變量的響應。

然後當用戶點擊/test2時,函數被再次調用,總共產生三條消息。

這裏是你會如何改變它登錄反應,但只發送一個消息出來:

import sendgrid 
from sendgrid import SendGridError, SendGridClientError, SendGridServerError 
sg = sendgrid.SendGridClient('[email protected]', 'xxx') 

def sendMessage(options): 
    message = sendgrid.Mail() 
    message.add_to('John Doe <[email protected]>') 
    message.set_subject('Example') 
    message.set_html('Body') 
    message.set_text('Body') 
    message.set_from('Dark Knight <[email protected]>') 
    message.add_attachment('image.jpg', './image.jpg') 

    // send the message and log the results to status 
    msg = sg.send(message) 
    return msg 

@app.route('/test2') 

def test2(): 
    // send the message, pass any options like email address (not required) 
    status = sendMessage(options) 
    return status 

我已經添加了上述新的功能來發送消息,並給它一個可選的options變種,所以你可以使用它來傳遞消息,如不同的電子郵件地址或主題。