Untitled

mail@pastecode.io avatar
unknown
csharp
a year ago
2.6 kB
7
Indexable
Never
using System;
using System.Collections;
using System.Net;
using System.Net.Mail;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using System.IO;
using System.Linq;
using DG.Tweening;

public class EmailUtility : MonoBehaviour
{
    public string sender = "aaa";
    public string smtpPassword = "aaa";
    public string smtpHost = "aaa";

    public TMP_InputField receiverInputField;
    public string attachmentFolderPath;
    public GameObject emailPanel;
    public GameObject emailSentPanel;

    private void Start()
    {
        if (receiverInputField == null)
        {
            Debug.LogError("Receiver input field is not assigned in the inspector!");
            return;
        }
    }

    public void SendEmail()
    {
        string receiver = receiverInputField.text;
        var mail = CreateMailMessage(receiver);

        StartCoroutine(SendEmailAsync(mail));
    }

    private MailMessage CreateMailMessage(string receiver)
    {
        var mail = new MailMessage
        {
            From = new MailAddress(sender),
            Subject = "Your Picture!",
            Body = "Please find your picture attached by BriteMinds."
        };

        mail.To.Add(receiver);

        string[] pngFiles = Directory.GetFiles(attachmentFolderPath, "*.png");
        string latestFile = pngFiles.OrderByDescending(f => File.GetLastWriteTime(f)).FirstOrDefault();

        if (!string.IsNullOrEmpty(latestFile))
        {
            mail.Attachments.Add(new Attachment(latestFile));
        }

        return mail;
    }

    private IEnumerator SendEmailAsync(MailMessage mail)
    {
        var smtpServer = new SmtpClient(smtpHost)
        {
            Port = 587,
            Credentials = new NetworkCredential(sender, smtpPassword)
        };

        ServicePointManager.ServerCertificateValidationCallback = (s, certificate, chain, sslPolicyErrors) => true;

        yield return null;

        try
        {
            smtpServer.Send(mail);
        }
        catch (Exception e)
        {
            Debug.LogError("Error sending email: " + e.Message);
        }
        finally
        {
            // Clean up and update UI here if needed
        }

        emailPanel.GetComponent<CanvasGroup>().DOFade(0, 1);

        yield return new WaitForSeconds(1);

        emailPanel.SetActive(false);
        emailSentPanel.SetActive(true);
        emailSentPanel.GetComponent<CanvasGroup>().alpha = 0;

        emailSentPanel.GetComponent<CanvasGroup>().DOFade(1, 1);
    }
}