Example #1
0
    def send_notification(self,
                          content,
                          sms_numbers=None,
                          sms_numbers_limit=None):
        result = {}

        # удаление двойных пробелов
        content = re.sub(r' +', ' ', content)

        # отправка пуш на все устройства пользователя (работает через firebase)
        for device in self.gcmdevice_set.all():
            device.send_message(content)
            result.setdefault('push_devices', []).append(device.pk)

        # отправка смс
        if self.receive_sms:
            from utils.sms import clean_numbers_for_sms, send_sms, transliterate_for_sms, MarafonException

            if not sms_numbers:
                sms_numbers = self.get_numbers_for_sms()

            if sms_numbers_limit:
                sms_numbers = sms_numbers[:sms_numbers_limit]

            try:
                send_sms(sms_numbers, transliterate_for_sms(content))
                result['sms_to'] = sms_numbers
            except MarafonException:
                import traceback
                result['sms_errors'] = traceback.format_exc(3).encode('utf-8')

        return result
Example #2
0
def send_verification_code(phone, type):
    verify_code = random.randint(1001, 9999)
    text = '验证码为:{},30分钟内有效。如非您本人操作,请忽略该短信。如需帮助,请拨打客服电话:4008813338'.format(
        verify_code)
    try:
        res = sms.send_sms(text, phone).decode('utf-8')
        res_list = re.findall('\d+', res)
        if type == 'edit':
            id = models.Users.objects.filter(
                phone=phone).values_list('id').first()[0]
        else:
            id = ''

        models.MessagesVerifyCode.objects.create(
            m_status=res_list[1],
            m_response_time=res_list[0],
            m_messageid=res_list[2],
            m_text=text,
            m_phone=phone,
            m_user_id=id,
            m_verifycode=verify_code,
        )
        return True
    except Exception as e:
        # print('---------短信错误提示:', e)
        return
Example #3
0
def process_message_send(order, step_name, employee_id):
    text = '用户您好,您购买的产品:{},进度更新:{};' \
           '如有疑问请拨打客服电话:4008813338。'.format(order.product_name, step_name)
    # text = '【盛德业】用户您好,您的服务订单:{},进度更新:{};' \
    #        '如有疑问登陆m.shengdeye.com官网咨询。'.format(order.order_code, step_name[0])

    phone = order.phone
    # else:
    #     text = '龙泽金你好,用户账号{}没有手机号码,无法发送短信'.format(order.username)
    #     res = sms.send_sms(text, 15363626218)
    message = {
        'order_id': order.id,
        'phone': order.phone,
        'content': text,
        'employee_id': employee_id,
    }
    try:
        res = sms.send_sms(text, phone).decode('utf-8')
        print('res:', res)
        res_list = re.findall('\d+', res)
        message['response_time'] = res_list[0]
        message['status'] = res_list[1]
        message['message_id'] = res_list[2]
    except Exception as e:
        message['status'] = 127
        message['response_time'] = 0
        message['message_id'] = 0
    print('message:', message)
    models.MessagesSend.objects.create(**message)
Example #4
0
def main():
    login = Login()
    Log.v('正在登录...')
    result, msg = login.login(USER_NAME, USER_PWD, IS_AUTO_CHECK_CAPTHCA)
    if not Utils.check(result, msg):
        Log.e(msg)
        return
    Log.v('%s,登录成功' % msg)

    seatTypesCode = SEAT_TYPE_CODE if SEAT_TYPE_CODE else [
        SEAT_TYPE[key] for key in SEAT_TYPE.keys()
    ]
    passengerTypeCode = PASSENGER_TYPE_CODE if PASSENGER_TYPE_CODE else '1'

    count = 0
    while True:
        # 死循环一直查票,直到下单成功
        try:
            nowTime, status = deadline.do_fix_time()
            if status:
                Log.v('当前时间:%s 处于23点到6点之间,12306处于维护状态,暂不处理下单业务' % nowTime)
                continue

            count += 1
            Log.v('第%d次访问12306网站' % count)
            print('-' * 40)
            ticketDetails = Query.loopQuery(
                TRAIN_DATE, FROM_STATION, TO_STATION,
                TrainUtils.passengerType2Desc(passengerTypeCode), TRAINS_NO,
                seatTypesCode, PASSENGERS_ID, POLICY_BILL,
                QUERY_TICKET_REFERSH_INTERVAL)
            Log.v('已为您查询到可用余票:%s' % ticketDetails)

            ticketDetails.passengersId = PASSENGERS_ID
            ticketDetails.ticketTypeCodes = passengerTypeCode
            ticketDetails.tourFlag = TOUR_FLAG if TOUR_FLAG else 'dc'
            submit = Submit(ticketDetails)
            if submit.submit(CHOOSE_SEATS):
                status, contents = submit.showSubmitInfoPretty()
                if status:
                    flag = send_mail(mail_user, mailto_list, '12306订票结果通知',
                                     mail_host, mail_user, mail_pass, contents)
                    if flag:
                        Log.v("邮件发送成功!")
                    else:
                        Log.v("邮件发送失败!")
                    sms_id = send_sms(ACCOUNT_SID, AUTO_TOKEN, FROM_NUM,
                                      TO_NUM,
                                      '小机机已经成功拿到小票票,请主人记得在30分钟内完成支付!!!')
                    if sms_id:
                        Log.v("短信提醒发送成功!")
                    else:
                        Log.v("短信提醒发送成功!")
                break
            time.sleep(1)
        except Exception as e:
            Log.w(e)
    print(login.loginOut())
Example #5
0
def working(username=USER_NAME, password=USER_PWD, id_cards=PASSENGERS_ID, day=TRAIN_DATE, from_station=FROM_STATION,
            to_station=TO_STATION,
            seats=SEAT_TYPE_CODE, types=PASSENGER_TYPE_CODE, train_no=TRAINS_NO, polocy=POLICY_BILL,
            tour_flag=TOUR_FLAG, refersh=QUERY_TICKET_REFERSH_INTERVAL):
    GetFreeProxy.getAllProxy(THREAD_POOL_SIZE, THREAD_OR_PROCESS, IS_REFASH_IP_POOL)
    init_ip_pool()
    login = Login()
    Log.v('正在登录...')
    result, msg = login.login(username, password, IS_AUTO_CHECK_CAPTHCA)
    if not Utils.check(result, msg):
        Log.e(msg)
        return
    Log.v('%s,登录成功' % msg)

    seatTypesCode = seats if seats else [SEAT_TYPE[key] for key in SEAT_TYPE.keys()]
    passengerTypeCode = types if types else '1'

    count = 0
    while True:
        # 死循环一直查票,直到下单成功
        try:
            nowTime, status = deadline.do_fix_time()
            if status:
                Log.v('当前时间:%s 处于23点到6点之间,12306处于维护状态,暂不处理下单业务' % nowTime)
                continue

            count += 1
            Log.v('第%d 次访问12306网站' % count)
            print('-' * 40)
            ticketDetails = Query.loopQuery(day, from_station, to_station,
                                            TrainUtils.passengerType2Desc(passengerTypeCode),
                                            train_no,
                                            seatTypesCode, id_cards, polocy, refersh)
            Log.v('已为您查询到可用余票:%s' % ticketDetails)

            ticketDetails.passengersId = id_cards
            ticketDetails.ticketTypeCodes = passengerTypeCode
            ticketDetails.tourFlag = tour_flag if tour_flag else 'dc'
            submit = Submit(ticketDetails)
            if submit.submit(CHOOSE_SEATS):
                status, contents = submit.showSubmitInfoPretty()
                if status:
                    flag = send_mail(mail_user, mailto_list, '12306订票结果通知', mail_host, mail_user, mail_pass, contents)
                    if flag:
                        Log.v("邮件发送成功!")
                    else:
                        Log.v("邮件发送失败!")
                    sms_id = send_sms(ACCOUNT_SID, AUTO_TOKEN, FROM_NUM, TO_NUM, '小机机已经成功拿到小票票,请主人记得在30分钟内完成支付!!!')
                    if sms_id:
                        Log.v("短信提醒发送成功!")
                    else:
                        Log.v("短信提醒发送成功!")
                break
            time.sleep(1)
        except Exception as e:
            Log.w("提交操作异常:" + e)
    print(login.loginOut())
Example #6
0
def parse_authorized_message(message):
    if 'text' not in message:
        return
    original_text = message['text'].strip()
    card = CHAT_ID.index(message['chat']['id'])

    # Send sms
    text = original_text.split(" ", 2)
    if len(text) >= 3 and text[0] in SMS_COMMAND:
        send_sms(text[1], text[2], card)
        return True

    # Reply sms
    if 'reply_to_message' in message and len(original_text):
        reply_sms(message['reply_to_message'], original_text, card)
        return True

    # Lookup contact
    text = original_text.split(" ", 1)
    if len(text) == 2 and text[0] in FIND_CONTACT_COMMAND:
        contact.send_contact(text[1], card)
        return True

    # KB command
    text = original_text
    if text in KB_COMMAND:
        TGBot.send_image(KB_IMAGE, KB_IMAGE_CAPTION)
        return True

    # AWS bandwidth command
    text = original_text
    if text in AWS_COMMAND:
        message_id = TGBot.send_message("[Working] Query AWS bandwidth...", card)
        used = get_used_bandwidth() / (1000 ** 3)
        TGBot.update_message("AWS bandwidth used: %.2f GB / 15 GB" % used, message_id, card)
        return True

    return False
Example #7
0
def super_hero(love):
    Log.v('启动***超级英雄***线程')
    #免费代理ip访问
    GetFreeProxy.getAllProxy(THREAD_POOL_SIZE, THREAD_OR_PROCESS, IS_REFASH_IP_POOL)
    init_ip_pool()

    EasyHttp.load_cookies(COOKIE_SAVE_ADDRESS)
    cookies = {c.name: c.value for c in EasyHttp.get_session().cookies}

    RAIL_EXPIRATION = cookies.get('RAIL_EXPIRATION')
    #(int(RAIL_EXPIRATION)-172800000) < int(time.time()*1000)
    if RAIL_EXPIRATION and int(RAIL_EXPIRATION) < int(time.time()*1000) :
        Log.d('cookie登录已过期,重新请求')
        status,login = do_login()
        if not status:
            love.change_status(True)
            return
    else:
        if not ('uamtk' in cookies and 'RAIL_DEVICEID' in cookies):
            status,login = do_login()
            if not status:
                love.change_status(True)
                return
        else:
            status = check_login()
            if not status:
                love.change_status(True)
                return
            login = Login()
            login._urlInfo = loginUrls['normal']
            Log.v('已登录状态,开始寻找小票票')

    seatTypesCode = SEAT_TYPE_CODE if SEAT_TYPE_CODE else [SEAT_TYPE[key] for key in SEAT_TYPE.keys()]
    passengerTypeCode = PASSENGER_TYPE_CODE if PASSENGER_TYPE_CODE else '1'
    Log.d("订单详情:日期[%s]/区间[%s至%s]%s/车次[%s]/刷票间隔[%ss]"%(TRAIN_DATE,FROM_STATION,TO_STATION,'/出发时间段['+'~'.join(leave_time)+']' if leave_time else '',','.join(TRAINS_NO),QUERY_TICKET_REFERSH_INTERVAL))
    count = 0
    while True:
        try:
            nowTime, status = deadline.do_fix_time()
            if status:
                Log.v('当前时间:%s 处于23点到6点之间,12306处于维护状态,暂不处理下单业务' % nowTime)
                continue

            count += 1
            Log.v('第%d次访问12306网站' % count)
            print('-' * 40)
            flag,ticketDetails = Query.loopQuery(TRAIN_DATE, FROM_STATION, TO_STATION,
                                            TrainUtils.passengerType2Desc(passengerTypeCode),
                                            TRAINS_NO,
                                            seatTypesCode, PASSENGERS_ID,leave_time, POLICY_BILL, QUERY_TICKET_REFERSH_INTERVAL,HEART_BEAT_PER_REQUEST_TIME)
            #非登录状态有票,仅支持自动登录或第三方AI自动登录
            if not flag:
                if SELECT_AUTO_CHECK_CAPTHCA == CAPTCHA_CHECK_METHOD_HAND:
                    Log.e("手动验证模式登录重试失败,请手动重试")
                    return

                status, login = do_login()
                if not status:
                    Log.e("自动验证模式登录重试失败自动登录失败,请手动重试")
                    return

            # Log.v('已为您查询到可用余票:%s' % ticketDetails)
            Log.v('已为您查询到可用余票:[日期:%s,车次:%s,出发站:%s,到达站:%s,出发时间:%s,到达时间:%s]' % (ticketDetails.custom_date,ticketDetails.trainNo,ticketDetails.fromStation,ticketDetails.toStation,ticketDetails.leaveTime,ticketDetails.arriveTime))

            ticketDetails.passengersId = PASSENGERS_ID
            ticketDetails.ticketTypeCodes = passengerTypeCode
            ticketDetails.tourFlag = TOUR_FLAG if TOUR_FLAG else 'dc'
            submit = Submit(ticketDetails)
            seats_default = copy.deepcopy(CHOOSE_SEATS)
            if (ticketDetails.seatType == SEAT_TYPE[SeatName.FIRST_CLASS_SEAT] or ticketDetails.seatType == SEAT_TYPE[SeatName.SECOND_CLASS_SEAT]) and not seats_default:
                results_seat = []
                for i in range(len(PASSENGERS_ID)):
                    random_seat = random.choice(NUM_SEAT)+random.choice(LETTER_SEAT)
                    if random_seat in results_seat:
                        continue
                    results_seat.append(random_seat)
                seats_default.extend(results_seat)

            if submit.submit(seats_default):
                status, contents = submit.showSubmitInfoPretty()
                if status:
                    Log.v("获取车票详情成功")
                    flag = send_mail(mail_user, mailto_list, '12306订票结果通知', mail_host, mail_user, mail_pass, contents)
                    if flag:
                        Log.v("邮件发送成功!")
                    else:
                        Log.v("邮件发送失败!")

                sms_id = send_sms(ACCOUNT_SID,AUTO_TOKEN,FROM_NUM,TO_NUM,'小机机已经成功拿到小票票,请主人记得在30分钟内完成支付!!!')
                if sms_id:
                    Log.v("短信提醒发送成功!")
                else:
                    Log.v("短信提醒发送失败!")
                break
            time.sleep(1)
        except Exception as e:
            Log.w(e)
    login.loginOut()
    Log.d('注销登录成功')
    love.change_status(True)
Example #8
0
def main():
    #免费代理ip访问
    GetFreeProxy.getAllProxy(THREAD_POOL_SIZE, THREAD_OR_PROCESS,
                             IS_REFASH_IP_POOL)
    init_ip_pool()

    EasyHttp.load_cookies(COOKIE_SAVE_ADDRESS)
    cookies = {c.name: c.value for c in EasyHttp.get_session().cookies}

    RAIL_EXPIRATION = cookies.get('RAIL_EXPIRATION')
    #当前实际显示有效时间为4天,实际访问可下单时间大概为2天(细节可按实际情况调节)
    if 'RAIL_EXPIRATION' in cookies and (int(RAIL_EXPIRATION) -
                                         172800000) < int(time.time() * 1000):
        Log.v('cookie登录已过期,重新请求')
        EasyHttp.removeCookies()
        status, login = do_login()
        if not status:
            return
    else:
        if not ('uamtk' in cookies and 'RAIL_DEVICEID' in cookies):
            status, login = do_login()
            if not status:
                return
        else:
            login = Login()
            Log.v('已登录状态,开始寻找小票票')

    seatTypesCode = SEAT_TYPE_CODE if SEAT_TYPE_CODE else [
        SEAT_TYPE[key] for key in SEAT_TYPE.keys()
    ]
    passengerTypeCode = PASSENGER_TYPE_CODE if PASSENGER_TYPE_CODE else '1'

    count = 0
    while True:
        # 死循环一直查票,直到下单成功
        try:
            nowTime, status = deadline.do_fix_time()
            if status:
                Log.v('当前时间:%s 处于23点到6点之间,12306处于维护状态,暂不处理下单业务' % nowTime)
                continue

            count += 1
            Log.v('第%d次访问12306网站' % count)
            print('-' * 40)
            ticketDetails = Query.loopQuery(
                TRAIN_DATE, FROM_STATION, TO_STATION,
                TrainUtils.passengerType2Desc(passengerTypeCode), TRAINS_NO,
                seatTypesCode, PASSENGERS_ID, POLICY_BILL,
                QUERY_TICKET_REFERSH_INTERVAL)
            Log.v('已为您查询到可用余票:%s' % ticketDetails)

            ticketDetails.passengersId = PASSENGERS_ID
            ticketDetails.ticketTypeCodes = passengerTypeCode
            ticketDetails.tourFlag = TOUR_FLAG if TOUR_FLAG else 'dc'
            submit = Submit(ticketDetails)
            if submit.submit(CHOOSE_SEATS):
                status, contents = submit.showSubmitInfoPretty()
                if status:
                    flag = send_mail(mail_user, mailto_list, '12306订票结果通知',
                                     mail_host, mail_user, mail_pass, contents)
                    if flag:
                        Log.v("邮件发送成功!")
                    else:
                        Log.v("邮件发送失败!")
                    sms_id = send_sms(ACCOUNT_SID, AUTO_TOKEN, FROM_NUM,
                                      TO_NUM,
                                      '小机机已经成功拿到小票票,请主人记得在30分钟内完成支付!!!')
                    if sms_id:
                        Log.v("短信提醒发送成功!")
                    else:
                        Log.v("短信提醒发送失败!")
                break
            time.sleep(1)
        except Exception as e:
            Log.w(e)
    login.loginOut()
    Log.d('注销登录成功')
Example #9
0
def main():
    #免费代理ip访问
    GetFreeProxy.getAllProxy(THREAD_POOL_SIZE, THREAD_OR_PROCESS,
                             IS_REFASH_IP_POOL)
    init_ip_pool()

    EasyHttp.load_cookies(COOKIE_SAVE_ADDRESS)
    cookies = {c.name: c.value for c in EasyHttp.get_session().cookies}

    RAIL_EXPIRATION = cookies.get('RAIL_EXPIRATION')
    #(int(RAIL_EXPIRATION)-172800000) < int(time.time()*1000)
    if RAIL_EXPIRATION and int(RAIL_EXPIRATION) < int(time.time() * 1000):
        Log.d('cookie登录已过期,重新请求')
        status, login = do_login()
        if not status:
            return
    else:
        if not ('uamtk' in cookies and 'RAIL_DEVICEID' in cookies):
            status, login = do_login()
            if not status:
                return
        else:
            response = EasyHttp.post_custom(loginUrls['normal']['conf'])
            if not response or not response.json():
                Log.d('登录状态检查失败,重新请求')
                status, login = do_login()
                if not status:
                    return
            resp = response.json()
            login_status = resp.get('data').get('is_login')
            Log.d('登录状态:%s' % login_status)
            if 'Y' != login_status:
                Log.d('登录状态已过期,重新请求')
                status, login = do_login()
                if not status:
                    return
            login = Login()
            login._urlInfo = loginUrls['normal']
            Log.v('已登录状态,开始寻找小票票')

    seatTypesCode = SEAT_TYPE_CODE if SEAT_TYPE_CODE else [
        SEAT_TYPE[key] for key in SEAT_TYPE.keys()
    ]
    passengerTypeCode = PASSENGER_TYPE_CODE if PASSENGER_TYPE_CODE else '1'

    count = 0
    while True:
        # 死循环一直查票,直到下单成功
        try:
            nowTime, status = deadline.do_fix_time()
            if status:
                Log.v('当前时间:%s 处于23点到6点之间,12306处于维护状态,暂不处理下单业务' % nowTime)
                continue

            count += 1
            Log.v('第%d次访问12306网站' % count)
            print('-' * 40)
            ticketDetails = Query.loopQuery(
                TRAIN_DATE, FROM_STATION, TO_STATION,
                TrainUtils.passengerType2Desc(passengerTypeCode), TRAINS_NO,
                seatTypesCode, PASSENGERS_ID, POLICY_BILL,
                QUERY_TICKET_REFERSH_INTERVAL)
            Log.v('已为您查询到可用余票:%s' % ticketDetails)

            ticketDetails.passengersId = PASSENGERS_ID
            ticketDetails.ticketTypeCodes = passengerTypeCode
            ticketDetails.tourFlag = TOUR_FLAG if TOUR_FLAG else 'dc'
            submit = Submit(ticketDetails)
            seats_default = copy.deepcopy(CHOOSE_SEATS)
            if (ticketDetails.seatType == SEAT_TYPE[SeatName.FIRST_CLASS_SEAT]
                    or ticketDetails.seatType
                    == SeatName.SECOND_CLASS_SEAT) and not seats_default:
                results_seat = []
                for i in range(len(PASSENGERS_ID)):
                    random_seat = random.choice(NUM_SEAT) + random.choice(
                        LETTER_SEAT)
                    if random_seat in results_seat:
                        continue
                    results_seat.append(random_seat)
                seats_default.extend(results_seat)

            if submit.submit(seats_default):
                status, contents = submit.showSubmitInfoPretty()
                if status:
                    flag = send_mail(mail_user, mailto_list, '12306订票结果通知',
                                     mail_host, mail_user, mail_pass, contents)
                    if flag:
                        Log.v("邮件发送成功!")
                    else:
                        Log.v("邮件发送失败!")
                    sms_id = send_sms(ACCOUNT_SID, AUTO_TOKEN, FROM_NUM,
                                      TO_NUM,
                                      '小机机已经成功拿到小票票,请主人记得在30分钟内完成支付!!!')
                    if sms_id:
                        Log.v("短信提醒发送成功!")
                    else:
                        Log.v("短信提醒发送失败!")
                break
            time.sleep(1)
        except Exception as e:
            Log.w(e)
    login.loginOut()
    Log.d('注销登录成功')
Example #10
0
def super_hero(love):
    Log.v('启动***超级英雄***线程')
    #免费代理ip访问
    GetFreeProxy.getAllProxy(THREAD_POOL_SIZE, THREAD_OR_PROCESS,
                             IS_REFASH_IP_POOL)
    init_ip_pool()

    EasyHttp.load_cookies(COOKIE_SAVE_ADDRESS)
    cookies = {c.name: c.value for c in EasyHttp.get_session().cookies}

    if 'uamtk' not in cookies or 'RAIL_DEVICEID' not in cookies:
        status, login = do_login(love)
        if not status:
            love.change_offline_status(True)
            return
    else:
        status, _ = check_user_login()
        if not status:
            status, login = do_login(love)
            if not status:
                love.change_offline_status(True)
                return

        Log.v('已登录状态,开始寻找小票票')

    seatTypesCode = SEAT_TYPE_CODE if SEAT_TYPE_CODE else [
        SEAT_TYPE[key] for key in SEAT_TYPE.keys()
    ]
    passengerTypeCode = PASSENGER_TYPE_CODE if PASSENGER_TYPE_CODE else '1'
    Log.d("订单详情:日期[%s]/区间[%s至%s]%s%s/刷票间隔[%ss]" %
          (','.join(TRAIN_DATE), FROM_STATION, TO_STATION,
           '/出发时间段[' + '~'.join(leave_time) + ']' if leave_time else '',
           '/车次[' + ','.join(TRAINS_NO) + ']' if TRAINS_NO else '',
           QUERY_TICKET_REFERSH_INTERVAL))
    count = 0
    while True:
        try:
            nowTime, status = deadline.do_fix_time()
            if status:
                Log.v('当前时间:%s 处于23点到6点之间,12306处于维护状态,暂不处理下单业务' % nowTime)
                continue

            count += 1
            Log.v('第%d次访问12306网站' % count)
            print('-' * 40)
            ticketDetails = Query.loopQuery(
                TRAIN_DATE, FROM_STATION, TO_STATION,
                TrainUtils.passengerType2Desc(passengerTypeCode), TRAINS_NO,
                seatTypesCode, PASSENGERS_ID, leave_time, POLICY_BILL,
                QUERY_TICKET_REFERSH_INTERVAL)
            status = love.get_login_status()
            # status,_ = check_user_login()
            if not status:
                #非登录状态有票,仅支持自动登录或第三方AI自动登录
                if SELECT_AUTO_CHECK_CAPTHCA == CAPTCHA_CHECK_METHOD_HAND:
                    Log.e("手动模式登录状态已过期,请手动重试...")

                status, login = do_login(love)
                if not status:
                    Log.e("登录状态已过期,重试登录失败")
                    love.change_offline_status(True)
                    return

            # Log.v('已为您查询到可用余票:%s' % ticketDetails)
            Log.v('已为您查询到可用余票:[日期:%s,车次:%s,出发站:%s,到达站:%s,出发时间:%s,到达时间:%s]' %
                  (ticketDetails.custom_date, ticketDetails.trainNo,
                   ticketDetails.fromStation, ticketDetails.toStation,
                   ticketDetails.leaveTime, ticketDetails.arriveTime))

            ticketDetails.passengersId = PASSENGERS_ID
            ticketDetails.ticketTypeCodes = passengerTypeCode
            ticketDetails.tourFlag = TOUR_FLAG if TOUR_FLAG else 'dc'
            submit = Submit(ticketDetails)
            seats_default = copy.deepcopy(CHOOSE_SEATS)
            if submit.submit(seats_default):
                status, contents = submit.showSubmitInfoPretty()
                if status:
                    Log.v("获取车票详情成功")
                    flag = send_mail(mail_user, mailto_list, '12306订票结果通知',
                                     mail_host, mail_user, mail_pass, contents)
                    if flag:
                        Log.v("邮件发送成功!")
                    else:
                        Log.v("邮件发送失败!")

                sms_id = send_sms(ACCOUNT_SID, AUTO_TOKEN, FROM_NUM, TO_NUM,
                                  '小机机已经成功拿到小票票,请主人记得在30分钟内完成支付!!!')
                if sms_id:
                    Log.v("短信提醒发送成功!")
                else:
                    Log.v("短信提醒发送失败!")
                break
            time.sleep(1)
        except Exception as e:
            Log.w(e)
    login.loginOut()
    Log.d('注销登录成功')
    love.change_offline_status(True)