Kundesone/app/Http/Controllers/Mailgun/EmailController.php

99 lines
3.9 KiB
PHP

<?php
namespace App\Http\Controllers\Mailgun;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
class EmailController extends Controller
{
public function saveEmail(Request $request){
// DB::beginTransaction();
// try {
$token = $request->input('token');
$timestamp = $request->input('timestamp');
$signature = $request->input('signature');
if (!verifyMailgunSignature($token, $timestamp, $signature)) {
update_setting('aw_test','Invalid signature.');
abort(403, 'Invalid signature.');
}
$data = $this->extractMailgunData($request->all());
$to_email = $data['to_email'];
$message = $data['message'];
update_setting('aw_test',$to_email);
$company = get_company('email',$to_email);
if($company){
$ticket = insertTicket($data['from_email'], $company->email, $data['subject'], $message,'inbox',$data['from_name'] );
if($ticket){
$response = createResponse($ticket->id,$message);
$attachmentCount = $request->input('attachment-count', 0);
update_setting('aw_test',$attachmentCount);
for ($i = 1; $i <= $attachmentCount; $i++) {
$attachment = $request->file("attachment-$i");
update_setting('aw_test',$attachment->getClientOriginalName());
if ($attachment && $attachment->isValid()) {
// Define a unique filename, possibly using the original filename and appending a timestamp or a unique id
$filename = time() . '_' . $attachment->getClientOriginalName();
// Save the attachment to the local or specific disk
$filePath = $attachment->storeAs('tickets/' . $ticket->id, $filename, 'public');
$fileUrl = url(Storage::url($filePath));
update_setting('aw_test',$fileUrl);
}
}
}
}else{}
// update_setting('aw_test',json_encode($request->all()));
// DB::commit();
// } catch (\Exception $e) {
// DB::rollBack();
// update_setting('aw_test',json_encode($e->getMessage()));
// sendEmailViaMailgun( 'ai.rapidev.tech', 'support@ai.rapidev.tech', '16bsse18212@gmail.com', 'error', json_encode($e->getMessage()));
// // Handle the exception
// }
}
public function extractMailgunData($data) {
// Prepare an array to hold the extracted data
$extractedData = [
'from_email' => $data['from'],
'to_email' => $data['To'],
'from_name' => '', // This will be extracted from the 'from' field
'subject' => $data['subject'],
'message' => $data['body-html'],
'mime_version' => $data['Mime-Version'],
'dkim_signature' => $data['Dkim-Signature']
];
// Extract the sender's name from the 'from' field
if (preg_match('/^(.*?) <(.*?)>$/', $data['from'], $matches)) {
$extractedData['from_name'] = $matches[1];
$extractedData['from_email'] = $matches[2];
}
return $extractedData;
}
}