updates
This commit is contained in:
@@ -6,7 +6,10 @@ import { updateInterest } from '~/server/utils/nocodb';
|
||||
export default defineEventHandler(async (event) => {
|
||||
const xTagHeader = getRequestHeader(event, "x-tag");
|
||||
|
||||
console.log('[Email Send] Request received with x-tag:', xTagHeader);
|
||||
|
||||
if (!xTagHeader || (xTagHeader !== "094ut234" && xTagHeader !== "pjnvü1230")) {
|
||||
console.error('[Email Send] Authentication failed - invalid x-tag');
|
||||
throw createError({ statusCode: 401, statusMessage: "unauthenticated" });
|
||||
}
|
||||
|
||||
@@ -23,7 +26,22 @@ export default defineEventHandler(async (event) => {
|
||||
attachments = []
|
||||
} = body;
|
||||
|
||||
console.log('[Email Send] Request body:', {
|
||||
to,
|
||||
subject,
|
||||
hasBody: !!emailBody,
|
||||
interestId,
|
||||
hasSessionId: !!sessionId,
|
||||
attachmentCount: attachments.length
|
||||
});
|
||||
|
||||
if (!to || !subject || !emailBody || !sessionId) {
|
||||
console.error('[Email Send] Missing required fields:', {
|
||||
hasTo: !!to,
|
||||
hasSubject: !!subject,
|
||||
hasBody: !!emailBody,
|
||||
hasSessionId: !!sessionId
|
||||
});
|
||||
throw createError({
|
||||
statusCode: 400,
|
||||
statusMessage: "To, subject, body, and sessionId are required"
|
||||
@@ -31,8 +49,10 @@ export default defineEventHandler(async (event) => {
|
||||
}
|
||||
|
||||
// Get encrypted credentials from session
|
||||
console.log('[Email Send] Getting credentials for sessionId:', sessionId);
|
||||
const encryptedCredentials = getCredentialsFromSession(sessionId);
|
||||
if (!encryptedCredentials) {
|
||||
console.error('[Email Send] No credentials found for sessionId:', sessionId);
|
||||
throw createError({
|
||||
statusCode: 401,
|
||||
statusMessage: "Email credentials not found. Please reconnect."
|
||||
@@ -40,7 +60,22 @@ export default defineEventHandler(async (event) => {
|
||||
}
|
||||
|
||||
// Decrypt credentials
|
||||
const { email, password } = decryptCredentials(encryptedCredentials);
|
||||
console.log('[Email Send] Decrypting credentials');
|
||||
let email: string;
|
||||
let password: string;
|
||||
|
||||
try {
|
||||
const decrypted = decryptCredentials(encryptedCredentials);
|
||||
email = decrypted.email;
|
||||
password = decrypted.password;
|
||||
console.log('[Email Send] Successfully decrypted credentials for:', email);
|
||||
} catch (decryptError) {
|
||||
console.error('[Email Send] Failed to decrypt credentials:', decryptError);
|
||||
throw createError({
|
||||
statusCode: 401,
|
||||
statusMessage: "Failed to decrypt email credentials. Please reconnect."
|
||||
});
|
||||
}
|
||||
|
||||
// Get user info for signature
|
||||
const defaultName = email.split('@')[0].replace('.', ' ').replace(/\b\w/g, l => l.toUpperCase());
|
||||
@@ -84,6 +119,7 @@ export default defineEventHandler(async (event) => {
|
||||
});
|
||||
|
||||
// Prepare email attachments
|
||||
console.log('[Email Send] Processing', attachments.length, 'attachments');
|
||||
const emailAttachments = [];
|
||||
if (attachments && attachments.length > 0) {
|
||||
const client = getMinioClient();
|
||||
@@ -92,6 +128,7 @@ export default defineEventHandler(async (event) => {
|
||||
try {
|
||||
// Determine which bucket to use
|
||||
const bucket = attachment.bucket || 'client-portal'; // Default to client-portal
|
||||
console.log('[Email Send] Processing attachment:', attachment.name, 'from bucket:', bucket, 'path:', attachment.path);
|
||||
|
||||
// Download file from MinIO
|
||||
const stream = await client.getObject(bucket, attachment.path);
|
||||
@@ -104,13 +141,14 @@ export default defineEventHandler(async (event) => {
|
||||
});
|
||||
|
||||
const content = Buffer.concat(chunks);
|
||||
console.log('[Email Send] Successfully downloaded attachment:', attachment.name, 'size:', content.length);
|
||||
|
||||
emailAttachments.push({
|
||||
filename: attachment.name,
|
||||
content: content
|
||||
});
|
||||
} catch (error) {
|
||||
console.error(`Failed to attach file ${attachment.name} from bucket ${attachment.bucket}:`, error);
|
||||
console.error(`[Email Send] Failed to attach file ${attachment.name} from bucket ${attachment.bucket}:`, error);
|
||||
// Continue with other attachments
|
||||
}
|
||||
}
|
||||
@@ -118,6 +156,8 @@ export default defineEventHandler(async (event) => {
|
||||
|
||||
// Send email
|
||||
const fromName = sig.name || defaultName;
|
||||
console.log('[Email Send] Sending email from:', email, 'to:', to);
|
||||
|
||||
const info = await transporter.sendMail({
|
||||
from: `"${fromName}" <${email}>`,
|
||||
to: to,
|
||||
@@ -126,6 +166,8 @@ export default defineEventHandler(async (event) => {
|
||||
html: htmlBody, // HTML version with signature
|
||||
attachments: emailAttachments
|
||||
});
|
||||
|
||||
console.log('[Email Send] Email sent successfully, messageId:', info.messageId);
|
||||
|
||||
// Store email in MinIO for thread history and update EOI Time Sent
|
||||
if (interestId) {
|
||||
@@ -175,7 +217,8 @@ export default defineEventHandler(async (event) => {
|
||||
messageId: info.messageId
|
||||
};
|
||||
} catch (error) {
|
||||
console.error('Failed to send email:', error);
|
||||
console.error('[Email Send] Failed to send email:', error);
|
||||
console.error('[Email Send] Error stack:', error instanceof Error ? error.stack : 'No stack trace');
|
||||
if (error instanceof Error) {
|
||||
throw createError({
|
||||
statusCode: 500,
|
||||
|
||||
Reference in New Issue
Block a user