def sendtest(self, request, campaign_id):
from premailer import Premailer
from django.core.mail import send_mail, BadHeaderError
receiver = request.POST.get('receiver')
if not receiver:
raise Http404
try:
campaign = self.model.objects.get(pk=campaign_id)
except self.model.DoesNotExist:
pass
else:
content = campaign.render_html(request, scheme='http://', test=True)
content = Premailer(content, strip_important=False).transform()
plain = campaign.render_plain(request, test=True)
try:
send_mail(
campaign.subject, plain, settings.DEFAULT_FROM_EMAIL,
recipient_list=[receiver],
html_message=content
)
except BadHeaderError:
pass
response = JsonResponse({})
set_cookie(response, 'last_receiver', receiver)
return response
python类BadHeaderError()的实例源码
def contactView(request):
"""
A simple view that shows the Contact form and sends an e-mail to the
administrators when submitted.
"""
submitSuccess = False
if request.method == 'GET':
form = ContactForm()
else:
form = ContactForm(request.POST)
if form.is_valid():
fromEmail = form.cleaned_data['fromEmail']
subject = form.cleaned_data['subject']
message = form.cleaned_data['message']
finalMessage = "From user : " + str(request.user.username) + "\n"
finalMessage += "Return e-mail : " + str(fromEmail) + "\n\n"
finalMessage += ("-" * 30) + "\n\n"
finalMessage += message
# Send the mail
try:
send_mail(subject, finalMessage, fromEmail, settings.EMAIL_CONTACT_LIST)
except BadHeaderError:
return HttpResponse('Invalid e-mail header found.')
submitSuccess = True
context = {
'form' : form,
'submitSuccess' : submitSuccess
}
return render(request, 'contact.html', context)
def notify_users_when_wanted( event = None ):
""" notifies users if *event* matches a filter of a user and the
user wants to be notified for the matching filter """
from grical.events.models import Event, Filter
if isinstance(event, Event):
pass
elif isinstance(event, int) or isinstance(event, long):
event = Event.objects.get(pk = event)
else:
event = Event.objects.get(pk = int(event))
# TODO: the next code iterate throw all users but this is not workable
# for a big number of users: implement a special data structure which
# saves filters and can look up fast filters matching an event
# TODO: show a diff of the changes
users = User.objects.all()
for user in users:
user_filters = Filter.objects.filter( user = user ).filter(
email = True)
for fil in user_filters:
if not fil.matches_event( event ):
continue
context = {
'username': user.username,
'event': event,
'filter': fil,
'site_name': Site.objects.get_current().name,
'site_domain': Site.objects.get_current().domain, }
# TODO: create the subject from a text template
subject = _(u'filter match: ') + event.title
# TODO: use a preferred language setting for users to send
# emails to them in this language
message = render_to_string( 'mail/event_notice.txt', context )
from_email = settings.DEFAULT_FROM_EMAIL
if subject and message and from_email and user.email:
try:
if ( not settings.DEBUG ) or user.username in \
settings.USERNAMES_TO_MAIL_WHEN_DEBUGGING:
send_mail( subject, message, from_email,
[user.email,], fail_silently = False )
except (BadHeaderError, SMTPConnectError), err:
logger.error(u'SMTP error while trying to send '
'notificationsemail - %s'%err)
except:
logger.error(u'Unexpected error while trying to send '
'notifications - %s'%traceback.format_exc())
else:
# FIXME: do something meaningfull, e.g. error log
pass