2014-11-05 13 views
5

Próbowałem wysłać e-mail za pomocą Pythona na kilka sposobów w aplikacji Kivy na Androida. Najbliższy, do którego przyszedłem, używa funkcji e-mailowej Plyera (https://plyer.readthedocs.org/en/latest/#plyer.facades.Email), ale nie obsługuje załączników.Wyślij wiadomość e-mail z załącznikiem z aplikacji Kivy na Androida, najlepiej otwierając klienta poczty e-mail

Co chcę, aby moja aplikacja działała to otwieranie klienta poczty e-mail użytkownika i wypełnianie pól odbiorcy, tematu, treści i załącznika. Załącznikiem będzie plik .csv generowany przez moją aplikację.

Czy ktoś ma sugestie, jak to zrobić? Jak mogę zmodyfikować ten kod tak, aby zawierał załączniki?

from jnius import autoclass, cast 
from plyer.facades import Email 
from plyer.platforms.android import activity 

Intent = autoclass('android.content.Intent') 
AndroidString = autoclass('java.lang.String') 


class AndroidEmail(Email): 
    def _send(self, **kwargs): 
    intent = Intent(Intent.ACTION_SEND) 
    intent.setType('text/plain') 

    recipient = kwargs.get('recipient') 
    subject = kwargs.get('subject') 
    text = kwargs.get('text') 
    create_chooser = kwargs.get('create_chooser') 

    if recipient: 
     intent.putExtra(Intent.EXTRA_EMAIL, [recipient]) 
    if subject: 
     android_subject = cast('java.lang.CharSequence', 
           AndroidString(subject)) 
     intent.putExtra(Intent.EXTRA_SUBJECT, android_subject) 
    if text: 
     android_text = cast('java.lang.CharSequence', 
          AndroidString(text)) 
     intent.putExtra(Intent.EXTRA_TEXT, android_text) 

    if create_chooser: 
     chooser_title = cast('java.lang.CharSequence', 
          AndroidString('Send message with:')) 
     activity.startActivity(Intent.createChooser(intent, 
                chooser_title)) 
    else: 
     activity.startActivity(intent) 


def instance(): 
    return AndroidEmail() 

Odpowiedz

1

Starsze android module posiada wsparcie dla przekazując nazwę pliku. Możesz użyć tego bezpośrednio lub dodać funkcję do plyer poprzez wywołanie odpowiednich części api Androida. Nie zgadzam się dokładnie, jak to robisz.