4

プレーンテキストの電子メールでのみ機能する組み込みのsend_mail関数を、HTML とプレーンテキストの両方のバージョンを自動的に生成する独自のスマートなsend_mail関数に置き換えたいと考えています。自分のアプリケーションで定義された自分の電子メールに対して、すべてが期待どおりに機能します。私はこの方法でviews.pyでそれを行うことができます:

from django.core import mail
from utils import send_mail as send_html_mail
mail.send_mail = send_html_mail

ただし、サード サイド アプリケーションの電子メールでは、依然として問題が発生します。私のコードの前に、send_mail関数のモンキーパッチですべてのインポートがすでに完了しています。

すべての django アプリケーションのすべてのインポートの前に、この関数をオーバーライドすることは可能ですか? または、この問題の別の解決策があるかもしれません。これらのサードパーティ アプリケーションの電子メールを送信するコードにパッチを適用したくありません。html-template を入れるだけでとても簡単です。

4

6 に答える 6

4

Django 1.2 では、プラグイン可能な電子メール バックエンドが可能です: http://docs.djangoproject.com/en/1.2/topics/email/#defining-a-custom-e-mail-backend

于 2011-01-13T22:12:52.417 に答える
2

多くの人があなたの質問を誤解しているようです。

サードパーティ モジュールからのインポートをオーバーライドするには、上書きsys.modules['django.core.mail']が機能する場合があります。

簡単なテストでは動作しますが、完全にはテストされていません。

import sys
from django.core import mail 

def my_send_mail(*args, **kwargs):
    print "Sent!11"

mail.send_mail = my_send_mail
sys.modules['django.core.mail'] = mail


from django.core.mail import send_mail
send_mail('blah')
# output: Sent!11

たとえば、そのコードを my に入れてimportsettings.pyを起動すると、自分のバージョンが取得されます。manage.py shellsend_mail

私のシェルセッション

In [1]: from django.core.mail import send_mail
In [2]: send_mail()
Sent!11

免責事項
私はこのようなことをしたことがなく、ファンキーな影響があるかどうかはわかりません.

于 2011-01-13T22:56:19.767 に答える
2

Django ドキュメントから: http://docs.djangoproject.com/en/dev/topics/email/#sending-alternative-content-types

from django.core.mail import EmailMultiAlternatives

subject, from_email, to = 'hello', 'from@example.com', 'to@example.com'
text_content = 'This is an important message.'
html_content = '<p>This is an <strong>important</strong> message.</p>'
msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
msg.attach_alternative(html_content, "text/html")
msg.send()

send_mail() は必要ありません。

于 2011-01-13T22:11:54.290 に答える
1

私は、すべてのプロジェクトのアプリケーションでプレーンテキストの電子メールから HTML ベースの電子メールにすばやく切り替えるためのアプリケーションを作成しました。Django コードや他のサードパーティ アプリケーションのコードを変更しなくても動作します。

ここで確認してください: https://github.com/ramusus/django-email-html

于 2011-01-15T21:14:20.520 に答える
0

Django 1.7 では、HTML メッセージを送信html_messageする関数に追加の属性が追加されました。send_mail()

https://docs.djangoproject.com/en/1.8/topics/email/#send-mail

于 2015-11-05T16:36:41.070 に答える
0

少し変更djangoして、オリジナルのコードを独自の関数に置き換えてみませんか? 最後の定義がインポートされるため、実際には独自の関数を追加するだけで、古い関数を削除することはできません。私は外部ライブラリにパッチを適用するのが好きではないので、そのような解決策は好きではありません (アップグレード時に再度パッチを適用することを覚えておく必要があります) が、これにより問題はすぐに解決されます。

于 2011-01-13T22:02:39.757 に答える