import { EmailOptions, EmailResponse, SmtpConfig, EmailProviderConfig } from '../interfaces/email-options.interface';
import { EmailRequest } from '../interfaces/email-request.interface';
import { IEmailService } from '../interfaces/email-service.interface';
import { ObservabilityConfig } from '../interfaces/observability.interface';
/**
 * EmailService - A reusable service for sending emails
 *
 * This service can be used in both NodeJS/JavaScript and NestJS/TypeScript projects.
 */
export declare class EmailService implements IEmailService {
    private transporter?;
    private defaultFrom?;
    private providerType;
    private sendGridConfigured;
    private sesService?;
    private observability;
    /**
     * Create an instance of EmailService
     *
     * @param providerConfig - Email provider configuration (SMTP, SendGrid, or SES)
     * @param defaultFrom - Default sender email and name
     * @param observabilityConfig - Optional observability configuration
     */
    constructor(providerConfig: EmailProviderConfig | SmtpConfig, // Support legacy constructor
    defaultFrom?: {
        email: string;
        name?: string;
    }, observabilityConfig?: ObservabilityConfig);
    /**
     * Configure email provider based on configuration
     * @private
     */
    private configureProvider;
    /**
     * Verify email provider connection
     *
     * @returns Promise<boolean> - True if connection is successful
     */
    verifyConnection(): Promise<boolean>;
    /**
     * Validate email options
     * @private
     */
    private validateEmailOptions;
    /**
     * Centralized error handler for email operations
     * @private
     */
    private handleError;
    /**
     * Send email using the new EmailRequest interface
     *
     * @param request - Email request
     * @returns Promise<EmailResponse> - Response with success status and message ID
     */
    sendEmail(request: EmailRequest): Promise<EmailResponse>;
    /**
     * Send email using legacy EmailOptions interface (for backward compatibility)
     *
     * @param options - Email options
     * @returns Promise<EmailResponse> - Response with success status and message ID
     */
    sendEmailLegacy(options: EmailOptions): Promise<EmailResponse>;
    /**
     * Create standardized email response
     * @private
     */
    private createSuccessResponse;
    /**
     * Create standardized error response
     * @private
     */
    private createErrorResponse;
    /**
     * Send an email using SMTP
     *
     * @param options - Email options
     * @returns Promise<EmailResponse> - Response with success status and message ID
     * @private
     */
    protected sendWithSmtp(options: EmailOptions): Promise<EmailResponse>;
    /**
     * Send an email using SendGrid
     *
     * @param options - Email options
     * @returns Promise<EmailResponse> - Response with success status and message ID
     * @private
     */
    private sendWithSendGrid;
    /**
     * Send an email using SES
     *
     * @param options - Email options
     * @returns Promise<EmailResponse> - Response with success status and message ID
     * @private
     */
    private sendWithSes;
    /**
     * Encode attachment content for SendGrid
     * @private
     */
    private encodeAttachmentContent;
    /**
     * Send a plain text email
     *
     * @param to - Recipient(s)
     * @param subject - Email subject
     * @param text - Plain text content
     * @param options - Additional email options
     * @returns Promise<EmailResponse> - Response with success status and message ID
     */
    sendPlainText(to: EmailOptions['to'], subject: string, text: string, options?: Partial<EmailOptions>): Promise<EmailResponse>;
    /**
     * Send an HTML email
     *
     * @param to - Recipient(s)
     * @param subject - Email subject
     * @param html - HTML content
     * @param options - Additional email options
     * @returns Promise<EmailResponse> - Response with success status and message ID
     */
    sendHtml(to: EmailOptions['to'], subject: string, html: string, options?: Partial<EmailOptions>): Promise<EmailResponse>;
    /**
     * Format recipients to the format expected by nodemailer
     *
     * @param recipients - Single recipient or array of recipients
     * @returns string - Formatted recipients string
     */
    private formatRecipients;
}
//# sourceMappingURL=email.service.d.ts.map