2016-02-19 2 views
0

Я стараюсь сделать вашу проблему как можно более ясной. Я установил входящий почтовый сервер в Odoo. Каждая входящая почта создает нового заявителя для моего hr_recruitment.Извлечение содержимого из электронной почты в Оду

код по умолчанию для этого действия в модуле выглядит следующим образом:

def message_new(self, cr, uid, msg, custom_values=None, context=None): 
    """ Overrides mail_thread message_new that is called by the mailgateway 
     through message_process. 
     This override updates the document according to the email. """ 

if custom_values is None: 
     custom_values = {} 
    val = msg.get('from').split('<')[0] 
    defaults = { 
     'name': msg.get('subject') or _("No Subject"), 
     'partner_name': val, 
     'email_from': msg.get('from'), 
     'email_cc': msg.get('cc'), 
     'user_id': False, 
     'partner_id': msg.get('author_id', False), } 

Пример входящего тела электронной почты:

ID пользователя: 1234
Имя пользователя: Nicolas Mustermann
Навыки программирования: Java, C++, Python
Страна: Германия
и т.д.

Все работает нормально, но я хочу, например, «имя» получает свою ценность (Nicolas Mustermann) из тела электронной почты. Как мне изменить строку: 'partner_name': val, чтобы это сделать?

С наилучшими пожеланиями

+0

О, ты прав ... я меняю его на столбе, тх –

+0

Я не понимаю, что ты имеешь в виду, меняя линию. Если у вас есть переменная 'val', которая содержит имя человека, что именно вы хотите сделать с этими данными? – CzechErface

ответ

0

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

def get_name_from_msg(msg): 
    prefix = 'User Name: ' 
    name_start = msg.find(prefix) 
    if name_start == -1: 
     return None 
    name_start += len(prefix) 
    name_end = msg.find('\n', name_start) 
    return msg[name_start:] if name_end == -1 else msg[name_start:name_end] 

Эта функция будет возвращать None, если не существует «Имя пользователя:» в msg.

Я бы хотел, чтобы кто-то опубликовал более «питонический» способ сделать это. Я чувствую, что этот метод очень громоздкий.

+0

Вы правы, имя определяется по адресу электронной почты ... но мне нужно, чтобы его читали из тела электронной почты. Дело в том, что я отправляю электронные письма на входящий сервер электронной почты для создания новых заявителей. Но если я это сделаю, заявитель назван в честь меня, потому что он определен с моим адресом электронной почты ... чтобы получить правильное имя автоматически, я должен использовать информацию в теле письма - я не могу использовать эту команду. getline или somthing, как это? поэтому непосредственно перейдите ко второй строке с именем? –

+0

Спасибо, я попробую это =) Я знаю, если это сработает –

Смежные вопросы