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.