def prepare_new_conflict_resolution_email_to_affected_user(issue): created_by = issue.created_by conversation = Conversation.objects.get_for_target(issue) voting = issue.latest_voting() user = issue.affected_user reply_to_name = created_by.display_name local_part = make_local_part(conversation, user) reply_to = formataddr( (reply_to_name, '{}@{}'.format(local_part, settings.SPARKPOST_RELAY_DOMAIN))) from_email = formataddr( (created_by.display_name, settings.DEFAULT_FROM_EMAIL)) this_issue_url = issue_url(issue) return prepare_email( template='new_conflict_resolution_affected_user', from_email=from_email, user=user, tz=issue.group.timezone, reply_to=[reply_to], context={ 'created_by': created_by, 'topic': issue.topic_rendered(), 'conversation_url': this_issue_url, 'issue_url': this_issue_url, 'expires_at': voting.expires_at, 'group': issue.group, }, stats_category='new_conflict_resolution', )
def prepare_group_conversation_message_notification(user, message): conversation = message.conversation group = conversation.target from_text = message.author.display_name reply_to_name = group.name conversation_name = group.name local_part = make_local_part(conversation, user, message) reply_to = formataddr( (reply_to_name, '{}@{}'.format(local_part, settings.SPARKPOST_RELAY_DOMAIN))) from_email = formataddr((from_text, settings.DEFAULT_FROM_EMAIL)) unsubscribe_url = conversation_unsubscribe_url(user, group=group, conversation=conversation) return prepare_email( template='conversation_message_notification', from_email=from_email, user=user, tz=group.timezone, reply_to=[reply_to], unsubscribe_url=unsubscribe_url, context={ 'messages': [message], 'conversation_name': conversation_name, 'conversation_url': group_wall_url(group), 'mute_url': unsubscribe_url, }, stats_category='group_conversation_message', )
def prepare_thread_message_notification(user, messages): first_message = messages[0] conversation = first_message.conversation group = conversation.find_group() thread = first_message.thread thread_text_beginning = Truncator(thread.content).chars(num=60) from_text = author_names(messages) reply_to_name = thread.author.display_name conversation_name = thread_text_beginning local_part = make_local_part(conversation, user, thread) reply_to = formataddr((reply_to_name, '{}@{}'.format(local_part, settings.SPARKPOST_RELAY_DOMAIN))) from_email = formataddr((from_text, settings.DEFAULT_FROM_EMAIL)) unsubscribe_url = thread_unsubscribe_url(user, group, thread) return prepare_email( template='thread_message_notification', from_email=from_email, user=user, tz=group.timezone, reply_to=[reply_to], unsubscribe_url=unsubscribe_url, context={ 'messages': messages, 'conversation_name': conversation_name, 'thread_author': thread.author, 'thread_message_content': thread.content_rendered(truncate_words=40), 'thread_url': thread_url(thread), 'mute_url': unsubscribe_url, }, stats_category='thread_message', )
def prepare_private_user_conversation_message_notification(user, messages): first_message = messages[0] conversation = first_message.conversation author = first_message.author reply_to_name = author.display_name local_part = make_local_part(conversation, user) reply_to = formataddr( (reply_to_name, '{}@{}'.format(local_part, settings.SPARKPOST_RELAY_DOMAIN))) from_email = formataddr((author.display_name, settings.DEFAULT_FROM_EMAIL)) unsubscribe_url = conversation_unsubscribe_url(author, conversation=conversation) return prepare_email( template='conversation_message_notification', from_email=from_email, user=user, # TODO: which timezone? maybe the user needs a timezone? reply_to=[reply_to], unsubscribe_url=unsubscribe_url, context={ 'messages': messages, 'conversation_name': author.display_name, 'conversation_url': user_detail_url(author), 'mute_url': unsubscribe_url, }, stats_category='private_conversation_message', )
def prepare_new_offer_notification_email(user, offer): conversation = Conversation.objects.get_for_target(offer) reply_to_name = offer.user.display_name local_part = make_local_part(conversation, user) reply_to = formataddr( (reply_to_name, '{}@{}'.format(local_part, settings.EMAIL_REPLY_DOMAIN))) from_email = formataddr( (offer.user.display_name, settings.DEFAULT_FROM_EMAIL)) unsubscribe_url = new_offer_unsubscribe_url(user, offer) return prepare_email( template='new_offer', from_email=from_email, user=user, tz=offer.group.timezone, reply_to=[reply_to], unsubscribe_url=unsubscribe_url, context={ 'user_name': offer.user.display_name, 'offer_photo': offer_image_url(offer), 'offer_name': offer.name, 'offer_description': offer.description, 'group': offer.group, 'offer_url': offer_url(offer), 'mute_url': unsubscribe_url, 'new_offer_unsubscribe_url': unsubscribe_url, }, stats_category='new_offer', )
def prepare_new_application_notification_email(user, application): applicant = application.user conversation = Conversation.objects.get_for_target(application) reply_to_name = applicant.display_name local_part = make_local_part(conversation, user) reply_to = formataddr( (reply_to_name, '{}@{}'.format(local_part, settings.EMAIL_REPLY_DOMAIN))) from_email = formataddr( (applicant.display_name, settings.DEFAULT_FROM_EMAIL)) unsubscribe_url = new_application_unsubscribe_url(user, application) return prepare_email( template='new_application', from_email=from_email, user=user, tz=application.group.timezone, reply_to=[reply_to], unsubscribe_url=unsubscribe_url, context={ 'applicant': applicant, 'group': application.group, 'questions': application.questions_rendered(), 'answers': application.answers_rendered(), 'conversation_url': application_url(application), 'mute_url': unsubscribe_url, 'new_application_unsubscribe_url': unsubscribe_url, 'applications_url': applications_url(application.group), 'group_edit_url': group_edit_url(application.group), }, stats_category='new_application', )
def make_message(self, reply_token=None, text='message body', html=None): reply_token = reply_token or make_local_part(self.conversation, self.user) return AnymailInboundMessage.construct( to='{}@example.com'.format(reply_token), text=text, html=html, )
def prepare_message_notification( user, messages, *, conversation_name, conversation_url, stats_category, group=None, reply_to_name=None, ): first_message = messages[0] conversation = first_message.conversation author = first_message.author if group: tz = group.timezone elif user.current_group: tz = user.current_group.timezone else: # default, I guess most groups are not so far from this timezone... tz = pytz.timezone('Europe/Berlin') if reply_to_name is None: reply_to_name = author.display_name with translation.override(language_for_user(user)): from_text = author_names(messages) # If the conversation supports threads, replies should go into a thread, not the main conversation thread = first_message if conversation.target and conversation.target.conversation_supports_threads else None local_part = make_local_part(conversation, user, thread) reply_to = formataddr( (reply_to_name, '{}@{}'.format(local_part, settings.EMAIL_REPLY_DOMAIN))) from_email = formataddr((from_text, settings.DEFAULT_FROM_EMAIL)) unsubscribe_url = conversation_unsubscribe_url( user, group=group, conversation=conversation) return prepare_email( template='conversation_message_notification', from_email=from_email, user=user, tz=tz, reply_to=[reply_to], unsubscribe_url=unsubscribe_url, context={ 'messages': messages, 'conversation_name': conversation_name, 'conversation_url': conversation_url, 'mute_url': unsubscribe_url, }, stats_category=stats_category, )
def prepare_application_message_notification(user, messages): first_message = messages[0] conversation = first_message.conversation application = conversation.target language = user.language if not translation.check_for_language(language): language = 'en' with translation.override(language): reply_to_name = application.user.display_name conversation_name = _( 'New message in application of %(user_name)s to %(group_name)s' ) % { 'user_name': application.user.display_name, 'group_name': application.group.name, } if application.user == user: conversation_name = _( 'New message in your application to %(group_name)s') % { 'group_name': application.group.name } from_text = author_names(messages) local_part = make_local_part(conversation, user) reply_to = formataddr( (reply_to_name, '{}@{}'.format(local_part, settings.SPARKPOST_RELAY_DOMAIN))) from_email = formataddr((from_text, settings.DEFAULT_FROM_EMAIL)) unsubscribe_url = conversation_unsubscribe_url( user, group=application.group, conversation=conversation) return prepare_email( template='conversation_message_notification', from_email=from_email, user=user, tz=application.group.timezone, reply_to=[reply_to], unsubscribe_url=unsubscribe_url, context={ 'messages': messages, 'conversation_name': conversation_name, 'conversation_url': application_url(application), 'mute_url': unsubscribe_url, }, stats_category='application_message', )
def prepare_pickup_conversation_message_notification(user, messages): first_message = messages[0] conversation = first_message.conversation pickup = conversation.target group_tz = pickup.place.group.timezone language = user.language if not translation.check_for_language(language): language = 'en' with translation.override(language): with timezone.override(group_tz): weekday = format_date( pickup.date.start.astimezone(timezone.get_current_timezone()), 'EEEE', locale=translation.to_locale(language), ) time = format_time( pickup.date.start, format='short', locale=translation.to_locale(language), tzinfo=timezone.get_current_timezone(), ) date = format_date( pickup.date.start.astimezone(timezone.get_current_timezone()), format='long', locale=translation.to_locale(language), ) long_date = '{} {}, {}'.format(weekday, time, date) short_date = '{} {}'.format(weekday, time) reply_to_name = _('Pickup %(date)s') % { 'date': short_date, } conversation_name = _('Pickup %(date)s') % { 'date': long_date, } from_text = author_names(messages) local_part = make_local_part(conversation, user) reply_to = formataddr( (reply_to_name, '{}@{}'.format(local_part, settings.SPARKPOST_RELAY_DOMAIN))) from_email = formataddr((from_text, settings.DEFAULT_FROM_EMAIL)) unsubscribe_url = conversation_unsubscribe_url( user, group=pickup.place.group, conversation=conversation) return prepare_email( template='conversation_message_notification', from_email=from_email, user=user, tz=group_tz, reply_to=[reply_to], unsubscribe_url=unsubscribe_url, context={ 'messages': messages, 'conversation_name': conversation_name, 'conversation_url': pickup_detail_url(pickup), 'mute_url': unsubscribe_url, }, stats_category='pickup_conversation_message', )