Requisitos:
- Microsoft Visual Studio Community 2019
 - Xamarin.Froms - XAML
 - Xamarin.Essentials - API
 - Sistema cliente de envío - Gmail
 
Crear proyecto:
Instalar paquetes desde NuGet:
![]()  | 
| Para este ejemplo se utilizo la opción de Administrar paquetes NuGet para la solución... | 
![]()  | 
| Examina e instales los paquetes  Xamarin.Essentials y Plugin.Permissions.  | 
Diseño de MVVM:
<?xml
version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="EssentialsEmailAttach.View.PageEmailSQLite"
             Title="Email con
archivo adjunto">
<ContentPage.Content>
        <FlexLayout AlignContent="Center" Padding="10,10,10,10">
            <StackLayout>
                <Frame BackgroundColor="#2196F3" Padding="24" CornerRadius="0">
                    <Label Text="Email with attachment
file!" HorizontalTextAlignment="Center" TextColor="White" FontSize="36"/>
                </Frame>
                <Label Text="Clic
en el bóton Enviar email!" FontSize="25" HorizontalTextAlignment="Center"/>
                <Button x:Name="sendEmail" FontSize="Medium" BorderColor="White" BorderWidth="2" Padding="30,0,30,0"
                        FlexLayout.AlignSelf="Center" CornerRadius="50"  HorizontalOptions="CenterAndExpand" 
                        Text="Enviar Email" Clicked="btn_Clicked" TextColor="White" BackgroundColor="#2196F3"/>
            </StackLayout>
        </FlexLayout>
    </ContentPage.Content>
</ContentPage>
Implementar CodeBehind:
Implementar modelo:
using System.Collections.Generic;
namespace EssentialsEmailAttach.Model
{        
    public class EmailProperties
    {
        /// <summary>
        /// Atributos para enviar el Email
        /// </summary>
        public string subject
{ get; set; }
        public string body { get; set; }
        public List<string> to {
get; set; }
        //public string
to { get; set; }
        public string
attachment { get; set; }
    }
Implementar PageEmailSQLite.xaml.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Xamarin.Essentials;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using EssentialsEmailAttach.Model;
using Plugin.Permissions;
using Plugin.Permissions.Abstractions;
namespace EssentialsEmailAttach.View
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class PageEmailSQLite : ContentPage
    {
        //Instancia al
modelo para pasar los datos del email
        EmailProperties emailProperties = new EmailProperties();        
        public PageEmailSQLite()
        {
            InitializeComponent();
        }
        private async void btn_Clicked(object sender, EventArgs e)
        {
            //Otorgar
permisos a la aplicación para poder acceder al archivo almacenado en el móvil -
celuar
            var storageStatus = await
CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Storage);
            if (storageStatus !=
Plugin.Permissions.Abstractions.PermissionStatus.Granted)
            {
                var results = await
CrossPermissions.Current.RequestPermissionsAsync(new[] { Permission.Storage });
                storageStatus =
results[Permission.Storage];
            }
            //Acceder a la
ubicación de archivo para poder adjunar como parte del email a ser enviado.
            var file = Path.Combine(FileSystem.AppDataDirectory, "/storage/emulated/0/DIAbetes/RPT HADSON PERIODO
MAR-2021.xlsx");
            //Acceder a la
ubicación de archivo para poder adjunar como parte del email a ser enviado.
            DateTime strPeriod = DateTime.Now;
            List<string> emailTo = new List<string>();
            emailTo.Add("hadparedes@hotmail.com");
            //Asigna lo
valores para cargar a los datos de nuestro modelo EmailProperties
            emailProperties.subject = "Test-01";
            emailProperties.body = "Hola!\n\nEstamos realizando envío de email haciendo uso de
la API Xamarin.Essentials "+
                                    "extrayendo los valores del mensaje desde SQLite.\n\nEspero
les sea útil."+
                                    "\n\nAtentamente;\nHadson!";
            emailProperties.to = emailTo;
            emailProperties.attachment = file;
            //Invoca a la
tarea asincrona parando el modelo EmailProperties con el fin de realizar el envío
del email
            await SendEmail(emailProperties);
        }
        public async Task
SendEmail(EmailProperties pemailProperties)
        {
            try
            {
                //Propiedades
del mensaje
                var message = new
EmailMessage
                {
                    Subject =
pemailProperties.subject,
                    Body =
pemailProperties.body,
                    To = pemailProperties.to,
                };
                var fn = pemailProperties.attachment;
                var file = Path.Combine(FileSystem.CacheDirectory, fn);
                message.Attachments.Add(new EmailAttachment(file));
                //API que
se encarga de abrir el cliente como el Gmail, Outlook u otros para realizar el
envío del mensaje
                await Email.ComposeAsync(message);
            }
            catch (FeatureNotSupportedException fnsEx)
            {
                // Email
is not supported on this device 
                await DisplayAlert("Error", fnsEx.ToString(), "OK");
            }
            catch (Exception ex)
            {
                // Some
other exception occurred
                await DisplayAlert("Error", ex.ToString(), "OK");
            }
        }
    }
}
Resultado del ejemplo:
![]()  | 
| Corresponde al MainPage | 
![]()  | 
| Página donde se esta implementado  el envío de email  | 
![]()  | 
| Clic en ALLOW (permitir) | 
![]()  | 
| Dato lista para enviar. | 
![]()  | 
| Resultado del envío realizado. | 










2 Comentarios
Excelente aporte, solo no me queda claro como se integra el archivo adjunto a la aplicacion
ResponderBorrarHola un gusto saludarte, para adjuntar el archivo se tiene que definir el origen; como en este ejemplo se esta definiendo de el storage del móvil propiamente dicho - fíjate en está línea de código var file = Path.Combine(FileSystem.AppDataDirectory, "/storage/emulated/0/DIAbetes/RPT HADSON PERIODO MAR-2021.xlsx"); luego la variable file será parte del objeto del mensaje a enviar con está linea
Borrarmessage.Attachments.Add(new EmailAttachment(file)); lo resto se encarga propiamente la API Xamarin.Essentials.