私はPython3.5を使用して、仕事用のいくつかの電子メールを自動化しています。SMTPは使用できません。これは、win32comを介してOutlookを制御することによって実行する必要があります。私はそれをすべて機能させました。HTMLメールを作成できます。メールアドレスを指定できます。Outlookプロファイルでアクティブなメールアドレスが開いている場合は、そのアドレスから送信されます。cc、bcc、件名などを追加できます。
私の問題は、Outlookに保存されている署名を追加することです。Outlookの署名が公開されていないことを読んだので、SendUsingAccountフィールドやmail.CCフィールドのように単純に呼び出すことはできません。
これに対する私の代替手段は、ユーザーにtkinterとaskopenfilename()を使用してファイルを指定させることです。
それはほとんどの部分で機能します。ユーザーは署名ファイルの場所を1回指定します。私はそれを私のtkinterプログラムが起動時に読み取るデータファイルに保存します。ユーザーがメールを生成して送信します。
問題は、署名ファイルからHTMLを読み取り、それを変数に格納してから、既存のHTMLBodyに追加していることです。
できます。ただし、HTMLの署名ファイルに含まれている画像は表示されません。
修正されることを期待して、htmlファイル内の画像の短いアドレスをFULLディレクトリに置き換える追加のスクリプトを作成しようとしました。立ち入り禁止。
署名ファイルに含まれている写真が実際に電子メールに表示されるようにする方法はありますか?
これが私の署名ファイルのHTMLリーダー/エディターです
def altersigfile(file):
fullDir = file
newDir = fullDir.rsplit("\\",1)[0]
subDir = fullDir.rsplit("\\", 1)[1]
subDir = subDir.replace(" ", "%20")
subDir = subDir.strip(".htm")
subDir += "_files"
newDir += "/" + subDir
newDir = newDir.replace("\\", "/")
newsigfile = ""
with open(fullDir,"r") as file:
for line in file:
if "src=" in line:
check = ""
newline = ""
check = r'src="' + subDir
newline = re.sub(subDir, newDir, line)
newsigfile += newline
else:
newsigfile += line
return newsigfile
これが私のメール送信者のスクリプトです。
def emailer(sendFrom, sendTo, subject, cc, bcc, body, sigfile=None, auto=False, useSig=False):
ol = win32.Dispatch('Outlook.Application')
msg = ol.CreateItem(0)
#DO NOT CHANGE: the below script is the only way you were able to get outlook to register what email you give it.
b=False
for i in range(1,ol.Session.Accounts.Count+1):
if ol.Session.Accounts.Item(i).SmtpAddress == sendFrom:
sendFrom = ol.Session.Accounts.Item(i)
b=True
break
if b==False:
messagebox.showinfo("Invalid Address",
"""The email address you entered ({email}), is not an authorized outlook email address. Please verify the email address you provided and make sure it is authorized in your outlook.""".format(email = sendFrom))
return
msg._oleobj_.Invoke(*(64209, 0, 8, 0, sendFrom))
#end of DO NOT CHANGE
msg.To = sendTo
msg.Subject = subject
if cc:
msg.CC = sendFrom
if bcc:
msg.BCC = ol.Session.Accounts.Item(1).SmtpAddress
msg.HTMLBody = body
#currently this does add the sigfile html file held by outlook. However... the picture doesnt load. :(
if useSig==True:
signature = altersigfile(sigfile)
msg.HTMLBody += signature
print(msg.HTMLBody)
繰り返しになります。上記は、署名ファイルに含まれている画像が表示されないことを除いて、すべての方法で機能します。これが唯一の間違いであり、私はそれを機能させる方法を見つけることができないようです。どんな助けでも大歓迎です。ありがとうございました。
PSコードの2番目のバッチでフォーマットして申し訳ありません。私の人生の間、私はそれを正しくフォーマットすることができなかったようです。
他のいくつかのオプション。
償還は、RDOSession.Signaturesコレクションを介して署名を公開し、そのRDOSignatureオブジェクトはApplyTo
、指定されたメッセージに署名(テキスト、画像、スタイル)をコピーするメソッドを公開します。
必要なのがデフォルトの署名だけの場合は、Outlookに処理を任せます。OutlookがメッセージMailItem.Display
を表示するとき()、またはMailItem.GetInspector
プロパティにアクセスして間もなくメッセージを表示するとOutlookが判断したときに、署名が追加されます。MailItem.Display
またはを呼び出すとすぐにMailItem.GetInspector
、BodyまたはHTMLBodyプロパティを使用してメッセージ本文をまだ設定していない限り、メッセージ本文に署名が追加されます。ここで行う必要があるのは、HTMLBody
プロパティ(署名のみを持つ)を読み取り、テキストをその値にマージして、HTMLBody
プロパティを元に戻すことだけです。2つのHTML文字列を単純に連結することはできず、それらをマージする必要があることに注意してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加