JIRA - Отправить письмо анонимному пользователю - PullRequest
5 голосов
/ 30 сентября 2011

Я пытаюсь найти способ отправить электронное письмо анонимному пользователю, когда кто-либо создает проблему посредством электронной почты.Мне нужно, чтобы этот анонимный пользователь получил уведомление по электронной почте, когда проблема была открыта, прокомментирована и закрыта.Согласно их официальной документации это может быть сделано только в том случае, если создатель уже является пользователем JIRA или пользователь будет создан на лету.Ни один из которых не работает для меня.Обходные пути, которые я нашел до сих пор:

  1. JEMH - который обещает эту функциональность, но выглядит нестабильным, то есть кажется, что он ломается (по крайней мере, немного) сКаждое обновление JIRA и отсутствие простоев для меня неприемлемо.
  2. Написание собственного сценария, как было рекомендовано в аналогичной теме

У меня нет проблем с написанием собственногосценарий, но я просто хотел быть уверен, что я не буду изобретать велосипед.Есть ли другие способы сделать это?

Я буду очень признателен за любую помощь.

Ответы [ 4 ]

1 голос
/ 21 мая 2012

Я только что заметил этот вопрос. JEMH теперь превратился в полноценный коммерческий плагин и имеет массу новых функций, некоторые из которых на самом деле касаются поддержки удаленных «анонимных» пользователей для создания проблем, по сути превращая JIRA в полнофункциональное решение для службы поддержки по электронной почте. Для этого доступна индивидуальная настройка шаблона для каждого отдельного события.

Что касается поломок, то, оставаясь в «последнем» выпуске, у разработчиков не остается времени на то, чтобы их догнать. Играйте умно, дайте всем разработчикам шанс догнать.

С учетом глубины JIRA API, которую допускает JEMH, поломки, к сожалению, были обычным явлением, но теперь они менее вероятны благодаря тому, что Atlassian стабилизировал некоторые основные API в версии 5.0+. Также ведется работа по обеспечению комплексного тестирования, которое само по себе является миссией!

1 голос
/ 07 марта 2013

Вот как я это сделал, используя Script Runner, подключив . Я сказал Джира, чтобы я получал письма из моего почтового ящика и создавал из них проблемы.Затем в рабочем процессе я сохранил электронную почту и имя отправителя в пользовательских полях, используя следующий сценарий:

from com.atlassian.jira import ComponentManager
import re
cfm = ComponentManager.getInstance().getCustomFieldManager()

# read issue description
description = issue.getDescription()
if (description is not None) and ('Created via e-mail received from' in description):
    # extract email and name:
    if ('<' in description) and ('>' in description):
        # pattern [Created via e-mail received from: name <email@company.com>]
        # split it to a list
        description_list = re.split('<|>|:',description)
        list_length = len(description_list)
        for index in range(list_length-1, -1, -1):
            if '@' in description_list[index]:
                customer_email = description_list[index]
                customer_name = description_list[index - 1]
                break
    else:
        # pattern [Created via e-mail received from: email@company.com]
        customer_name = "Sir or Madam"
        # split it to a list  
        description_list = re.split(': |]',description)
        list_length = len(description_list)
        for index in range(list_length-1, -1, -1):
            if '@' in description_list[index]:
                customer_email = description_list[index]
                break

    # if the name isn't in the right form, switch it's places:
    if (customer_name[0] == '"') and (customer_name[-1] == '"') and (',' in customer_name):
        customer_name = customer_name[1:-1]
        i =  customer_name.index(',')
        customer_name = customer_name[i+2:]+" "+customer_name[:i]

    # insert data to issue fields
    issue.setCustomFieldValue(cfm.getCustomFieldObject("customfield_10401"),customer_email)
    issue.setCustomFieldValue(cfm.getCustomFieldObject("customfield_10108"),customer_name)

than, отправьте письмо с помощью следующего сценария:

import smtplib,email
from smtplib import SMTP 
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email import Encoders
import os
import re
from com.atlassian.jira import ComponentManager

customFieldManager = ComponentManager.getInstance().getCustomFieldManager()
cfm = ComponentManager.getInstance().getCustomFieldManager()

# read needed fields from the issue
key = issue.getKey()
#status = issue.getStatusObject().name
summary = issue.getSummary()
project = issue.getProjectObject().name

# read customer email address
toAddr = issue.getCustomFieldValue(cfm.getCustomFieldObject("customfield_10401"))
# send mail only if a valid email was entered
if (toAddr is not None) and (re.match('[A-Za-z0-9._%+-]+@(?:[A-Za-z0-9-]+\.)+[A-Za-z]{2,4}',toAddr)):
    # read customer name
    customerName = issue.getCustomFieldValue(cfm.getCustomFieldObject("customfield_10108"))
    # read template from the disk
    template_file = 'new_case.template'
    f = open(template_file, 'r')
    htmlBody = ""
    for line in f:
        line = line.replace('$$CUSTOMER_NAME',customerName)
        line = line.replace('$$KEY',key)
        line = line.replace('$$PROJECT',project)
        line = line.replace('$$SUMMARY',summary)
        htmlBody += line + '<BR>'


    smtpserver = 'smtpserver.com'
    to = [toAddr]
    fromAddr = 'jira@email.com'
    subject = "["+key+"] Thank You for Contacting Support team"
    mail_user = 'jira@email.com'
    mail_password = 'password'

    # create html email
    html = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" '
    html +='"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">'
    html +='<body style="font-size:12px;font-family:Verdana">'
    html +='<p align="center"><img src="http://path/to/company_logo.jpg" alt="logo"></p> '
    html +='<p>'+htmlBody+'</p>'
    html +='</body></html>'

    emailMsg = email.MIMEMultipart.MIMEMultipart('alternative')
    emailMsg['Subject'] = subject
    emailMsg['From'] = fromAddr
    emailMsg['To'] = ', '.join(to)
    emailMsg.attach(email.mime.text.MIMEText(html,'html'))

    # Send the email
    s = SMTP(smtpserver) # ip or domain name of smtp server
    s.login(mail_user, mail_password)   
    s.sendmail(fromAddr, [to], emailMsg.as_string())
    s.quit()

    # add sent mail to comments
    cm = ComponentManager.getInstance().getCommentManager()
    email_body = htmlBody.replace('<BR>','\n')
    cm.create(issue,'anonymous','Email was sent to the customer ; Subject: '+subject+'\n'+email_body,False)

содержимое new_case.template:

Dear $$CUSTOMER_NAME,

Thank you for contacting support team.

We will address your case as soon as possible and respond with a solution very quickly.

Issue key $$KEY has been created as a reference for future correspondence.

If you need urgent support please refer to our Frequently Asked Questions page at http://www.example.com/faq.

Thank you,

Support Team


Issue key: $$KEY
Issue subject: $$PROJECT
Issue summary: $$SUMMARY

Все сценарии должны быть присоединены к рабочему процессу, к переходу Create. Эти сценарии написаны с использованием Jython, поэтому необходимоустановлен для использования.

0 голосов
/ 17 мая 2019

Вы можете отправить уведомление на электронную почту, сохраненную в настраиваемом поле Jira, используя Raley Email Notifications Конфигурация тривиальна, вот пример, как это сделать: https://wiki.raleyapps.com/display/RAL/Sending+email+to+value+from+JIRA+issue+custom+field

0 голосов
/ 30 сентября 2011

Я сомневаюсь, что эта функциональность уже встроена в JIRA, и я не видел плагин, который будет делать это.

Я изучал это в прошлом и пришел пустым.Я подозреваю, что это не встроено, потому что для многих потенциальных клиентов это позволило бы им обойтись без лицензии на 10 пользователей и все же поддерживать тысячи пользователей.

Вместо этого мы использовали неограниченную пользовательскую лицензию.

Обновление: я хотел добавить к этому, что вы могли бы написать сценарий, который сделал бы это, я думаю.Но похоже, что это будет PITA с необходимостью создания настраиваемого слушателя, чтобы фиксировать изменения в проблеме https://developer.atlassian.com/display/DOCS/Plugin+Tutorial+-+Writing+event+listeners+with+the+atlassian-event+library

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...