Здравствуйте, возникла следующая задача: получить данные из LDAP-каталога и добавить в качестве подписи в проходящее через сервер письмо.
С письмами без вложений проблем не возникло, с вложениями, к сожалению - проблемы, письмо приходит с “текстом” вместо вложения:
--------------040104080601050901050108
Content-Type: text/plain;
name="deadbeef.spec"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="deadbeef.spec"

TmFtZTogZGVhZGJlZWYKVmVyc2lvbjogMC41LjEKUmVsZWFzZTogMSV7P2Rpc3R9ClN1bW1h
cnk6IEEgbXVzaWMgcGxheWVyIHdpdGggY3VlIHNoZWV0IHN1cHBvcnQKCkdyb3VwOiBBcHBs
aWNhdGlvbnMvTXVsdGltZWRpYQpMaWNlbnNlOiBHUEx2MisgYW5kIExHUEx2MisKVVJMOiBo
dHRwOi8vZGVhZGJlZWYuc291cmNlZm9yZ2UubmV0LwpTb3VyY2UwOiBodHRwOi8vZG93bmxv
YWRzLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L2RlYWRiZWVmL2RlYWRiZWVmLSV7dmVyc2lv
Текст программки вот такой:
#!/usr/local/bin/python
# coding: UTF-8
import sys, os, re, ldap
from get_ad_data import *
path = "/usr/local/mailsystem/bin/test/"
workdir = "work"
sys.path.append(path)

# Sending our "new" message
def send(sender, recipient):
email = sender.split("@")[0]
vars = { 'message_path': path, 'sender': sender, 'recipient': recipient ,'email': email}
os.system("/bin/cat %(message_path)s/work/%(email)s.message.txt |/usr/sbin/sendmail -G -i -f %(sender)s -- %(recipient)s" % vars)

# here we will get sender and destination adress(es)
def get_address():
recipient = ""
address = sys.argv[1]
for line in sys.argv[2:]:
recipient = recipient + " " + line
data = {'sender': address, 'recipient': recipient }
return data

# write message to file and get it's encoding
def get_message(email):
email = email.split("@")[0]
file = open(os.path.join(path,"work",email+".message.txt"), "w")
file_enc = open(os.path.join(path,"enc"), "w")
for line in sys.stdin:
#Content-Type: text/plain; charset=UTF-8; format=flowed
try:
a = re.search("charset=\w+\-\w+", line)
a = line[a.start():a.end()]
a = a.replace("charset=", "")
enc = a
try:
file_enc.write(a)
except TypeError:
pass
except AttributeError:
pass
file.write(line)
file_enc.close()
file.close()
if enc:
return enc


def add_sign(email):
workdir = "work"
email_addr = email.split("@")[0]
email = os.path.join(path, workdir, email_addr+".message.txt")
sign = os.path.join(path, workdir, email_addr+".txt")
#html_sign = os.path.join(path, workdir, email_addr+".html")
html_sign = os.path.join(path, workdir, "test.html")
os.system("""
/usr/local/bin/altermime \
--input=%s \
--disclaimer=%s \
--disclaimer-html=%s \
--force-for-bad-html --force-into-b64 \
--htmltoo \
--multipart-insert
""" % (email,sign,html_sign))

def clean_files(email):
email_addr = email.split("@")[0]
os.remove(os.path.join(path, workdir, email_addr+".message.txt"))
os.remove(os.path.join(path, workdir, email_addr+".txt"))
os.remove(os.path.join(path, workdir, email_addr+".html"))

addr = get_address()
charset = get_message(addr['sender'])
# create sign
create_sign(get_data(),charset)
# add sign
add_sign(addr['sender'])
# sending email
send(addr['sender'], addr['recipient'])
#clean up temp files
clean_files(addr['sender'])
Думаю, часть с получаем данных из LDAP каталога интереса не представляет.
Зараннее благодарю за помощь.