Sist endret: 29. okt. 2026
Preview: Dette er dokumentasjonen for Altinn Studio v9, som er en forhåndsversjon. Gjeldende versjon er v8. For å se dokumentasjonen for gjeldende versjon, velg v8 i versjonsvelgeren i menyen til venstre.

E-post

Slik sender du e-post til brukere fra appen din.

Aktivere e-postvarsling i appen din

E-postklienten er allerede registrert i appen. Du bruker den ved å ta inn grensesnittet IEmailNotificationClient i konstruktøren til klassen din. Grensesnittet definerer en metode du bruker til å bestille en e-postvarsling fra Altinn Varslinger-API-et.

Kodeeksempel

Nedenfor ser du et eksempel der appen sender en e-postvarsling når brukeren har begynt å fylle ut skjemaet. Eksempelet bruker en prosess-hook som implementerer IOnTaskStartingHandler.

Prosessen kan kjøre hooken på nytt hvis den feiler. Bestill derfor e-posten som det siste hooken gjør, slik at et nytt forsøk ikke sender den samme e-posten to ganger.

using System.Threading.Tasks;
using Altinn.App.Core.Features;
using Altinn.App.Core.Features.Process;
using Altinn.App.Core.Models.Notifications.Email;
using Microsoft.Extensions.Logging;

namespace Altinn.App;

public class EmailOnStart(ILogger<EmailOnStart> logger, IEmailNotificationClient emailNotificationClient)
    : IOnTaskStartingHandler
{
    // "Task_1" er id-en til skjemasteget i BPMN-prosessen
    public bool ShouldRunForTask(string taskId) => taskId == "Task_1";

    public async Task<HandlerResult> Execute(OnTaskStartingContext context)
    {
        var order = new EmailNotification
        {
            Subject = "Skjema startet",
            Body = "Du har begynt å fylle ut skjemaet",
            SendersReference = "<min-skjema-ref>",
            Recipients = [new("navn.navnesen@epost.no")],
        };

        try
        {
            var orderResult = await emailNotificationClient.Order(order, context.CancellationToken);
            logger.LogInformation(
                "Task started, email sent to {EmailAddress} - OrderId={OrderId}",
                order.Recipients[0].EmailAddress,
                orderResult.OrderId
            );
        }
        catch (EmailNotificationException e)
        {
            // Prosessen går videre selv om e-posten ikke ble sendt
            logger.LogError(e, "Error sending email on task start");
        }

        return HandlerResult.Success();
    }
}

I eksempelet går prosessen videre selv om bestillingen feiler. Skal prosessen heller vente og prøve på nytt, returnerer du HandlerResult.FailedRetryable("melding") i catch-blokken. Da venter prosessen til bestillingen lykkes, og den stopper hvis alle forsøkene feiler.

Deretter må du registrere klassen EmailOnStart som IOnTaskStartingHandler i Program.cs.

App/Program.cs
using Altinn.App;
using Altinn.App.Core.Features.Process;

void RegisterCustomAppServices(IServiceCollection services, IConfiguration config, IWebHostEnvironment env)
{
    services.AddTransient<IOnTaskStartingHandler, EmailOnStart>();
}