Files
PyMTA-server/email_frontend/templates/email/error.html
2025-06-07 10:48:03 +01:00

174 lines
6.6 KiB
HTML

{% extends "base.html" %}
{% block title %}Error - SMTP Management{% endblock %}
{% block content %}
<div class="row">
<div class="col-12">
<div class="card border-danger">
<div class="card-header bg-danger text-white">
<div class="d-flex align-items-center">
<i class="fas fa-exclamation-triangle me-2"></i>
<h5 class="mb-0">Error Occurred</h5>
</div>
</div>
<div class="card-body">
{% if error_code %}
<div class="row mb-3">
<div class="col-sm-3"><strong>Error Code:</strong></div>
<div class="col-sm-9">
<span class="badge bg-danger fs-6">{{ error_code }}</span>
</div>
</div>
{% endif %}
{% if error_message %}
<div class="row mb-3">
<div class="col-sm-3"><strong>Message:</strong></div>
<div class="col-sm-9">
<div class="alert alert-danger mb-0">
{{ error_message }}
</div>
</div>
</div>
{% endif %}
{% if error_details %}
<div class="row mb-3">
<div class="col-sm-3"><strong>Details:</strong></div>
<div class="col-sm-9">
<div class="bg-dark text-light p-3 rounded">
<pre class="mb-0"><code>{{ error_details }}</code></pre>
</div>
</div>
</div>
{% endif %}
<div class="row mb-3">
<div class="col-sm-3"><strong>Timestamp:</strong></div>
<div class="col-sm-9">
<span class="text-muted">{{ moment().format('YYYY-MM-DD HH:mm:ss') }}</span>
</div>
</div>
<div class="row">
<div class="col-sm-3"><strong>Request URL:</strong></div>
<div class="col-sm-9">
<code>{{ request.url if request else 'Unknown' }}</code>
</div>
</div>
</div>
<div class="card-footer">
<div class="d-flex justify-content-between align-items-center">
<div>
<a href="{{ url_for('email_management.dashboard') }}" class="btn btn-primary">
<i class="fas fa-home me-1"></i>
Return to Dashboard
</a>
<button onclick="history.back()" class="btn btn-secondary">
<i class="fas fa-arrow-left me-1"></i>
Go Back
</button>
</div>
<div>
<button class="btn btn-outline-light" onclick="copyErrorDetails()">
<i class="fas fa-copy me-1"></i>
Copy Error Details
</button>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Common Error Solutions -->
<div class="row mt-4">
<div class="col-12">
<div class="card">
<div class="card-header">
<h6 class="mb-0">
<i class="fas fa-lightbulb me-2"></i>
Common Solutions
</h6>
</div>
<div class="card-body">
<div class="row">
<div class="col-md-6">
<h6>Database Issues:</h6>
<ul class="text-muted small">
<li>Check database connection settings</li>
<li>Verify database tables exist</li>
<li>Check database permissions</li>
</ul>
</div>
<div class="col-md-6">
<h6>Configuration Issues:</h6>
<ul class="text-muted small">
<li>Verify settings.ini file exists</li>
<li>Check file permissions</li>
<li>Validate configuration values</li>
</ul>
</div>
</div>
<div class="row">
<div class="col-md-6">
<h6>Network Issues:</h6>
<ul class="text-muted small">
<li>Check firewall settings</li>
<li>Verify DNS resolution</li>
<li>Test network connectivity</li>
</ul>
</div>
<div class="col-md-6">
<h6>Permission Issues:</h6>
<ul class="text-muted small">
<li>Check file system permissions</li>
<li>Verify user authentication</li>
<li>Review access controls</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
function copyErrorDetails() {
const errorDetails = {
code: '{{ error_code or "Unknown" }}',
message: '{{ error_message or "No message" }}',
details: `{{ error_details or "No details" }}`,
timestamp: '{{ moment().format("YYYY-MM-DD HH:mm:ss") }}',
url: '{{ request.url if request else "Unknown" }}'
};
const errorText = `Error Report:
Code: ${errorDetails.code}
Message: ${errorDetails.message}
Details: ${errorDetails.details}
Time: ${errorDetails.timestamp}
URL: ${errorDetails.url}`;
navigator.clipboard.writeText(errorText).then(() => {
// Show success message
const btn = event.target.closest('button');
const originalText = btn.innerHTML;
btn.innerHTML = '<i class="fas fa-check me-1"></i>Copied!';
btn.classList.remove('btn-outline-light');
btn.classList.add('btn-success');
setTimeout(() => {
btn.innerHTML = originalText;
btn.classList.remove('btn-success');
btn.classList.add('btn-outline-light');
}, 2000);
}).catch(err => {
console.error('Failed to copy: ', err);
alert('Failed to copy error details to clipboard');
});
}
</script>
{% endblock %}