aboutsummaryrefslogblamecommitdiffstats
path: root/pygm2n
blob: 9c4e069d8e0773e8151272ececb12d30b68135fb (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
                     
                       












                                                                          
                                     
 
          
              
 
               
 
                
 
 
                               

 
                    

                                                                          
                                                   










                                                                            

                                                                
 



                                                        
 





                                                                     
 
                              
 

                                                                   
 
               
 
 





                                                

 
    
 


                                          
 

                               
 
                         
 

                                                              
                      
 


                                         
 




                                                                   
 

                                                       

                                               
 
                                                    
 

                                
                       



                                        
 
                                                                   

                                                  



                                              

                         

                               
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""News to mail gateway script. Copyright 2000 Cosimo Alfarano

Author: Cosimo Alfarano
Date: June 11 2000

pygs - Copyright 2000 by Cosimo Alfarano <Alfarano@Students.CS.UniBo.It>
You can use this software under the terms of the GPL. If we meet some day,
and you think this stuff is worth it, you can buy me a beer in return.

Thanks to md for this useful formula. Beer is beer.

Gets news article and sends it via SMTP.
"""
from __future__ import print_function

import sys
import nntplib

import argparse

import mail2news


sys.path.append('/usr/lib/pyg')


def parse_cmdline():
    parser = argparse.ArgumentParser(
        description='%s version %s - Copyright 2000 Cosimo Alfarano\n%s' %
        ('pyg', mail2news.VERSION, mail2news.DESC))

    parser.add_argument('-s', '--newsserver', default='')
    parser.add_argument('-a', '--approver', default='',
                        help="address of moderator/approver")
    parser.add_argument('-n', '--newsgroup', default='',
                        help='newsgroup[s] (specified as comma separated ' +
                        'without spaces list)', required=True)
    parser.add_argument('-u', '--user', default='')
    parser.add_argument('-p', '--password', default='',
                        help='password (for auth to newsserver)')
    parser.add_argument('-P', '--port', default='')
    # WHAT IS THIS GOOD FOR?
    # parser.add_argument('-M', '--reader', action='store_true')

    parser.add_argument('-e', '--envellope', default='')
    parser.add_argument('-t', '--to', dest='rcpt')
    parser.add_argument('-w', '--wlfile')
    parser.add_argument('-l', '--logfile')

    parser.add_argument('-T', '--test', action='store_true',
                        help='test mode (not send article via NNTP)')
    parser.add_argument('-d', '--debug', action='store_true')
    parser.add_argument('-V', '--verbose', action='store_true',
                        help='verbose output ' +
                        '(usefull with -T option for debugging)')

    args = parser.parse_args()

    if not args.newsgroup:
        raise argparse.ArgumentError('Error: Missing Newsgroups\n')

    return args


"""main is structured in 4 phases:
    1) check and set pyg's internal variables
    2) check whitelist for users' permission
    3) format rfc 822 headers from input article
    4) open smtp connection and send e-mail
"""


try:

    """phase 1:
    check and set pyg's internal variables
    """

    m2n = mail2news.mail2news()
    owner = None

    opt = parse_cmdline()

    # reads stdin and parses article separating head from body
    m2n.readfile(opt)
    # m2n.parseemail()

    """phase 2:
    check whitelist for user's permission
    """

    """phase 3:
    format rfc 822 headers from input article
    """

    m2n.mergeheads()    # make unique dict from NNTP and SMTP dicts

    m2n.heads_dict['X-Gateway'] = 'pyg {0} {1}'.format(
        mail2news.VERSION, mail2news.DESC)
    m2n.renameheads()    # rename useless heads
    m2n.removeheads()    # remove other heads

    m2n.sortheads()        # sort remaining heads :)

    if opt.verbose:
        for line in m2n.headers:
            print(line)

    """phase 4:
    open smtp connection and send e-mail
    """

    if len(m2n.headers) > 0 and len(m2n.message.get_payload()) > 0:
#        wl.logmsg(m2n.heads_dict,wl.ACCEPT,owner)
        if not opt.test:
            try:
                resp = m2n.sendemail()
            except nntplib.NNTPError, message:
                print(message)

except KeyboardInterrupt:
    print('Keyboard Interrupt')
    sys.exit(0)