How to get user agent with Contact Form 7 submission?

Joni P Dec 20, 2024 Custom Functionality
I use Contact Form 7. When a user submits a CF7 form, I also need to know the user's user agent (browser info). I want this information to be sent separately to my development email. How do I do that?
Hook: wpcf7_mail_sent
Andy answered Dec 20, 2024

Getting User Agent with Contact Form 7 Submissions

Basic Solution

The simplest way to capture the user agent and send it with CF7 submissions is by using the wpcf7_mail_sent hook. Here's how to implement it:

This code sends the user agent to your development email whenever a form is submitted:

add_action('wpcf7_mail_sent', 'send_user_agent_info');

function send_user_agent_info($contact_form) {
    $user_agent = $_SERVER['HTTP_USER_AGENT'];
    $submission = WPCF7_Submission::get_instance();
    
    if ($submission) {
        $posted_data = $submission->get_posted_data();
        $form_title = $contact_form->title();
        
        wp_mail(
            'your-dev-email@example.com',
            'Form Submission User Agent Info - ' . $form_title,
            'User Agent: ' . $user_agent . "\n\nForm ID: " . $contact_form->id()
        );
    }
}

Enhanced Solution with Additional Data

This version includes more details and better formatting:

add_action('wpcf7_mail_sent', 'send_detailed_submission_info');

function send_detailed_submission_info($contact_form) {
    $submission = WPCF7_Submission::get_instance();
    
    if ($submission) {
        $user_agent = sanitize_text_field($_SERVER['HTTP_USER_AGENT']);
        $ip_address = $submission->get_meta('remote_ip');
        $form_title = $contact_form->title();
        
        $message = sprintf(
            "Form Submission Details\n\n" .
            "Form: %s\n" .
            "Form ID: %d\n" .
            "User Agent: %s\n" .
            "IP Address: %s\n" .
            "Date: %s",
            $form_title,
            $contact_form->id(),
            $user_agent,
            $ip_address,
            current_time('mysql')
        );
        
        wp_mail(
            'your-dev-email@example.com',
            'Form Submission Details - ' . $form_title,
            $message
        );
    }
}

Security Considerations

  1. Always sanitize the user agent string using sanitize_text_field()
  2. Consider GDPR implications when storing user data
  3. Limit email notifications to prevent spam
  4. Use WordPress's built-in wp_mail() function for sending emails

Alternative Solutions

Using Additional Mail Templates

CF7 allows multiple mail templates. You could add a second mail template in your form settings dedicated to technical information:

  1. Go to form settings
  2. Add a new mail template
  3. Include this special mail tag: [_remote_ip]
  4. Add your development email as the recipient

Helpful Plugins

  1. Contact Form 7 Database Addon – CFDB7

    • Stores all form submissions in the database
    • Includes user agent information automatically
    • Provides export functionality
  2. Advanced CF7 DB

    • Similar to CFDB7 but with additional features
    • Includes user agent and IP tracking
    • Offers detailed analytics

Common Pitfalls

  1. Don't rely solely on $_SERVER['HTTP_USER_AGENT'] as it can be spoofed
  2. Avoid sending sensitive information via email
  3. Don't store user agent data longer than necessary
  4. Be cautious with email volume to prevent server overload

Remember to test your implementation thoroughly, especially with different browsers and devices to ensure consistent data collection.

For production environments, consider implementing rate limiting and logging to prevent abuse of the email notification system.