Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano sposób używania interfejsu użytkownika aplikacji wieloplatformowej platformy .NET (.NET MAUI), IEmail aby otworzyć domyślną aplikację poczty e-mail. Po załadowaniu aplikacji poczty e-mail można ją ustawić tak, aby utworzyć nową wiadomość e-mail z określonymi adresatami, tematem i treścią.
Domyślna implementacja interfejsu IEmail
jest dostępna za pośrednictwem właściwości Email.Default. Zarówno interfejs IEmail
, jak i klasa Email
znajdują się w przestrzeni nazw Microsoft.Maui.ApplicationModel.Communication
.
Rozpocznij
Aby uzyskać dostęp do funkcji poczty e-mail, wymagana jest następująca konfiguracja specyficzna dla platformy.
Jeśli docelowa wersja systemu Android projektu jest ustawiona na Android 11 (R API 30) lub nowszą, musisz zaktualizować manifest systemu Android za pomocą zapytań, które korzystają z wymagań dotyczących widoczności pakietów systemu Android.
W pliku Platforms/Android/AndroidManifest.xml dodaj następujące queries/intent
węzły w elemencie manifest
.
<queries>
<intent>
<action android:name="android.intent.action.SENDTO" />
<data android:scheme="mailto" />
</intent>
</queries>
Korzystanie z poczty e-mail
Funkcja e-mail działa poprzez przekazywanie informacji o poczcie jako argument do metody ComposeAsync. W tym przykładzie EmailMessage typ jest używany do reprezentowania informacji e-mail:
if (Email.Default.IsComposeSupported)
{
string subject = "Hello friends!";
string body = "It was great to see you last weekend.";
string[] recipients = new[] { "john@contoso.com", "jane@contoso.com" };
var message = new EmailMessage
{
Subject = subject,
Body = body,
BodyFormat = EmailBodyFormat.PlainText,
To = new List<string>(recipients)
};
await Email.Default.ComposeAsync(message);
}
Załączniki plików
Podczas tworzenia wiadomości e-mail udostępnionej klientowi poczty e-mail możesz dodać załączniki plików. Typ pliku (MIME) jest wykrywany automatycznie, więc nie trzeba go określać. Niektórzy klienci poczty mogą ograniczyć typy wysyłanych plików lub w ogóle uniemożliwić załączniki.
Użyj kolekcji EmailMessage.Attachments , aby zarządzać plikami dołączonymi do wiadomości e-mail.
W poniższym przykładzie pokazano dodawanie pliku obrazu do załączników wiadomości e-mail.
if (Email.Default.IsComposeSupported)
{
string subject = "Hello friends!";
string body = "It was great to see you last weekend. I've attached a photo of our adventures together.";
string[] recipients = new[] { "john@contoso.com", "jane@contoso.com" };
var message = new EmailMessage
{
Subject = subject,
Body = body,
BodyFormat = EmailBodyFormat.PlainText,
To = new List<string>(recipients)
};
string picturePath = Path.Combine(FileSystem.CacheDirectory, "memories.jpg");
message.Attachments.Add(new EmailAttachment(picturePath));
await Email.Default.ComposeAsync(message);
}
Kontrolowanie lokalizacji plików
Ważne
Ta sekcja dotyczy tylko systemu Android.
W niektórych scenariuszach na Androidzie, na przykład gdy plik znajduje się w prywatnej pamięci, można go skopiować do pamięci podręcznej aplikacji, która jest następnie udostępniana za pośrednictwem systemu Android FileProvider
. Może to jednak przypadkowo odsłonić całą pamięć podręczną i dane aplikacji atakującemu. Można temu zapobiec, dodając do aplikacji plik z zastąpionymi ścieżkami plików dostawcy, oraz upewniając się, że pliki są kopiowane do lokalizacji określonej w tym pliku przed ich udostępnieniem.
Aby dodać plik, który zastępuje ścieżki plików dostawcy w Twojej aplikacji, dodaj plik o nazwie microsoft_maui_essentials_fileprovider_file_paths.xml do folderu Platforms\Android\Resources\xml w aplikacji. W związku z tym pełna względna nazwa pliku projektu powinna być Platformy\Android\Resources\xml\microsoft_maui_essentials_fileprovider_file_paths.xml. Następnie dodaj kod XML do pliku dla wymaganych ścieżek:
<?xml version="1.0" encoding="UTF-8" ?>
<paths>
<external-path name="external_files" path="sharing-root" />
<cache-path name="internal_cache" path="sharing-root" />
<external-cache-path name="external_cache" path="sharing-root" />
</paths>
Aby uzyskać więcej informacji na temat ścieżek dostawcy plików, zobacz FileProvider w developer.android.com.
Przed udostępnieniem pliku upewnij się, że został on najpierw zapisany w folderze sharing-root w jednej z lokalizacji wymienionych w pliku zastąpienia:
// Write into the specific sub-directory
var dir = Path.Combine(FileSystem.CacheDirectory, "sharing-root");
Directory.CreateDirectory(dir);
var file = Path.Combine(dir, "mydata.txt");
await File.WriteAllTextAsync(file, $"My data: {count}");
// Share the file
await Launcher.OpenAsync(new OpenFileRequest
{
Title = "My data",
File = new ReadOnlyFile(file),
});
Możesz sprawdzić, czy plik jest poprawnie udostępniany, jeśli udostępniony identyfikator URI wyklucza katalog główny udostępniania. Jeśli na przykład udostępnisz plik <CacheDirectory>/sharing-root/mydata.txt, a udostępniony identyfikator URI jest content://com.companyname.overwritefileproviderpaths.fileProvider/internal_cache/sharing-root/mydata.txt
, dostawca plików nie używa prawidłowej ścieżki. Jeśli udostępniony identyfikator URI jest content://com.companyname.overwritefileproviderpaths.fileProvider/internal_cache/mydata.txt
, dostawca plików używa poprawnej ścieżki.
Ostrzeżenie
Jeśli podczas udostępniania pliku otrzymasz Java.Lang.IllegalArgumentException
z komunikatem podobnym do "Nie można odnaleźć ustawionego katalogu głównego zawierającego /data/data/com.companyname.overwritefileproviderpaths/cache/some-non-sharing-path/mydata.txt", najprawdopodobniej udostępniasz plik znajdujący się poza katalogiem root udostępniania.
Różnice między platformami
Nie wszystkie klienty poczty e-mail dla Androida obsługują EmailBodyFormat.Html, więc ponieważ nie ma możliwości wykrycia tego, zalecamy użycie EmailBodyFormat.PlainText podczas wysyłania wiadomości e-mail.