Post

Replies

Boosts

Views

Created

Alamofire Error
I keep getting this error when I try to run my app: responseValidationFailed(reason:Alamofire.AFError.ResponseValidationFailureReason.unacceptableStatusCode(code: 401)) Status code: 401 I am just trying to incorporate Mailgun into my app. I've don't=e some reaserch and people keep saying that I put in an invalid API key, but it is the correct one! Help would be much appreciated. Here's the code (obviously the API Key and domain would be filled in with my actual one): import SwiftUI import Alamofire import SwiftyJSON struct ContentView: View { let mailgunAPIKey = "-apikey-" let mailgunDomain = "-mailgundomain-" let recipientEmail = "email@email.com" @State private var userEmail = "" @State private var showAlert = false var body: some View { VStack { TextField("Your Email", text: $userEmail) .textFieldStyle(RoundedBorderTextFieldStyle()) .padding() Button(action: { sendEmail() }) { Text("Send Email") } } .alert(isPresented: $showAlert) { Alert(title: Text("Success"), message: Text("Email sent successfully"), dismissButton: .default(Text("OK"))) } } func sendEmail() { let parameters: [String: String] = [ "from": userEmail, "to": recipientEmail, "subject": "Test Email", "text": "Hello from Mailgun!" ] AF.request("https://api.mailgun.net/v3/\(mailgunDomain)/messages", method: .post, parameters: parameters, encoding: URLEncoding.httpBody, headers: HTTPHeaders(["Authorization": "Basic \(mailgunAPIKey)"])) .validate() .responseJSON { response in switch response.result { case .success(let value): if let json = value as? [String: Any] { print(json) showAlert = true // Show the alert on success } else { print("Error parsing JSON response") } case .failure(let error): print(error) if let statusCode = response.response?.statusCode { print("Status code: \(statusCode)") } // Handle error } } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
0
0
2.1k
Jun ’23
Appointment booking feature in my app
Hey everyone, I am building an app for my dad's business and I have implemented a feature where you can book a consultation with him. You can select a date, enter your name and your email and a note if you'd like. And when you press "Book", it sends an email to my dad with all of the info that you inputted. That all works well, but when you select the "Book" button, the mail composer pops up with the appointment info that you inputted. But I would like for the email to automatically send to my dad when the user presses "Book", I don't want the user to have to send the email along with pressing the "Book" button. Is this possible? And if not, what are some other ways that I can implement the appointment booking software? Any help would be appreciated! Thanks in advance. Here is the code for the booking page: import UIKit import MessageUI struct AppointmentFormView: View { @State private var name: String = "" @State private var contact: String = "" @State private var selectedDate = Date() @State private var notes: String = "" @State private var showAlert = false var body: some View { Form { Section(header: Text("Personal Information")) { TextField("First + Last Name", text: $name) TextField("Your Email Address", text: $contact) } Section(header: Text("Appointment Details")) { DatePicker("When would you like your appointment?", selection: $selectedDate, displayedComponents: [.date]) TextField("Anything you'd like us to know?", text: $notes) } Button(action: { // Perform validation and backend tasks bookAppointment() }) { Text("Book") } } .alert(isPresented: $showAlert) { Alert(title: Text("Appointment Booked"), message: Text("Your appointment has been successfully booked."), dismissButton: .default(Text("OK"))) } } private func bookAppointment() { // Perform validation and backend tasks here // Example implementation: show alert when appointment is booked showAlert = true // Compose and send the email notification let mailView = MailView(recipientEmail: "inquiries@metricacarpentry.com", subject: "New Appointment Booked", messageBody: """ Name: \(name) Contact: \(contact) Date: \(selectedDate) Notes: \(notes) """) UIApplication.shared.windows.first?.rootViewController?.present(UIHostingController(rootView: mailView), animated: true, completion: nil) } } struct UIMailView: UIViewControllerRepresentable { let recipientEmail: String let subject: String let messageBody: String @Binding var showAlert: Bool // Add showAlert binding func makeUIViewController(context: Context) -> MFMailComposeViewController { let composeVC = MFMailComposeViewController() composeVC.mailComposeDelegate = context.coordinator composeVC.setToRecipients([recipientEmail]) composeVC.setSubject(subject) composeVC.setMessageBody(messageBody, isHTML: false) return composeVC } func updateUIViewController(_ uiViewController: MFMailComposeViewController, context: Context) { // No need to update the view controller } func makeCoordinator() -> Coordinator { Coordinator(showAlert: $showAlert) // Pass showAlert binding to Coordinator } final class Coordinator: NSObject, MFMailComposeViewControllerDelegate { @Binding var showAlert: Bool init(showAlert: Binding<Bool>) { _showAlert = showAlert } func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { EmailHelper.getRootViewController()?.dismiss(animated: true, completion: nil) if result == .sent { let alert = UIAlertController(title: "Email Sent ✅", message: "Thanks for your inquiry! We'll get back to you within 24 hours.", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) EmailHelper.getRootViewController()?.present(alert, animated: true, completion: nil) } } } }
1
0
1.1k
Jun ’23