SPF Records for Outgoing Email: What They Are & Why They Matter

Learn what an SPF record is, why it’s essential for email deliverability, and how to configure it properly for sending outgoing emails from your domain.

When users mark messages as spam from a domain, mailbox providers can accurately identify that domain as a potential source of spam – if it has a valid SPF (Sender Policy Framework) records. SPF helps distinguish legitimate senders from spoofed ones. Conversely, if spoofed emails are flagged, SPF enables providers to maintain the domain’s reputation and ensure legitimate mail flows smoothly. Clearly, using SPF helps enhance the accuracy of spam filtering and protect email reputation.

Understand Why SPF Records Often Fails with PHP’s mail()

PHP developers frequently rely on the mail() function for sending emails. However, this approach skips SMTP authentication, making outgoing emails prone to being caught by SPF checks. What’s more, SPF only evaluates the envelope sender (the “Return-Path” header), not the “From” address users actually see. You can read about this at http://www.openspf.org/FAQ/Envelope_from_scope.

In many cases, the envelope sender defaults to the server or localhost, even when the “From” header appears to come from your domain. SPF checks then focus on the envelope sender—if it lacks a proper SPF records, the email may result in a soft fail. Gmail, for instance, might label this as a “best guess record,” which can be incorrect and hurt deliverability.

How to Fix SPF Records Soft-Fail Issues

Here are two effective solutions:

Switch to an SMTP-based mailer

Use libraries like PHPMailer to send emails via SMTP. This allows setting the envelope sender to match the “From” address, enabling proper SPF alignment.

Use sendmail parameters with PHP’s mail()

If refactoring the code is too extensive, you can still adjust the envelope sender using PHP’s mail() function with the -f or -F options in the additional parameters, for example:

mail("user@example.com",  "test subject",  "test message",  $headers,  "-F 'Example  Envelope-sender' -f returnpath@example.com");

This ensures the envelope sender matches your domain – making SPF checks pass correctly.

Conclusion

In essence, SPF plays a vital role in email deliverability and domain reputation. But to leverage it effectively, you must ensure emails send with the correct envelope sender. For PHP developers, the most reliable approach is using SMTP-based mailing; alternatively, configuring the envelope address via sendmail parameters can help bridge the gap without major code changes.

Getting Started with Vi Editor in Unix: Essential Commands & Tips

A beginner-friendly guide to using the Vi editor in Unix. Learn basic navigation, editing, and saving commands to boost your productivity in the terminal.

vi is a command-line text editor originally created for the Unix operating system.

The name vi is derived from the shortest unambiguous abbreviation for the command visual; the command in question switches the line editor ex to visual mode.

Most of the network administrators are familiar with this little editor in Unix, because they use it regularly. But, for first timers, it’s most difficult editor. First timers have to remember all commands and keys to edit a simple file.

vi has two modes, Insert mode and Command mode. In insert mode, you can add/edit the texts in file. And in command mode, you can navigate and command the editor like save, exit, copy, paste, etc.

These are the commands and keys for those who want to get familiar with vi editor.

Command to open the vi editor:

vi filename

This command creates a new file if filename is not available in current directory. By default, vi begins in command mode.

Basic Commands for vi Editor

To start the insert mode, you can use following keys:

Insert text at beginning of line:I
Insert text at cursor:i
append text after cursor:a
Append text at line end:A
Open line above cursor:O
Open line below cursor:o

To switching back, and start the Command mode, press [ESC]

Most commands execute as soon as typed except for “colon” commands which execute when you press the return key.

Cursor Movement Commands for vi Editor

For cursor movement in command mode, you can use following commands/keys:

Go to beginning of line0
Go to end of line$
Go to line number ##:##
Go to line nnG
Go to last lineG
Left 6 chars6h
Move left, down, up, righth j k l
Move left, down, up, right← ↓ ↑ →
Scroll Backward 1 screen[ctrl] b
Scroll Forward 1 screen[ctrl] f
Scroll by sentence forward/backward( )
Scroll by word forward/backwardw b
Scroll by paragraph forward/backward{ }
Scroll Up 1/2 screen[ctrl] u
Scroll Down 1/2 screen[ctrl] d

Content Edit Commands for vi Editor

For deleting/changing text/character in command mode, you can use following commands/keys:

Change wordcw
Replace one characterr
Delete worddw
Delete text at cursorx
Delete entire line (to buffer)dd
Delete (backspace) text at cursorX
Delete 5 lines (to buffer)5dd
Delete current to end of lineD
Delete lines 5-10:5,10d

You can use the following commands/keys for editing the content in command prompt:

Copy lineyy
Copy n linesnyy
Copy lines1-2 /paste after 3:1,2t3
Move lines 4-5/paste after 6:4,5m6
Paste above current lineP
Paste below current linep
Undo all changes to lineU
Undo previous commandu
Join previous lineJ
Find next string occurrencen
Search backward for string?string
Search forward forstring/string
% (entire file) s (search and replace) /old text with new/ c (confirm) g (global – all):%s/oldstring/newstring/cg
Ignore case during search:set ic
Repeat last command.

Save or Quit Commands for vi Editor

To save or quit the command mode, you can use following commands/keys:

Save changes to buffer:w
Save changes and quit vizz or :wq
Save file to new file:w file
Quit without saving:q!
Save lines to new file:10,15w file

In all of the above commands, a number n will tell vi to repeat that command n times.

:syntax on Turn on syntax highlighting
:syntax off Turn off syntax highlighting
:set number Turn on Line numbering (shorthand :set nu)
:set nonumber Turn off Line numbering (shorthand :set nonu)

:set ignorecase Ignore case sensitivity when searching
:set noignorecase Restore case sensitivity (default)

Pencil Project – An Open Source GUI Prototyping Tool

Explore Pencil Project, a free and open-source GUI prototyping tool. Learn about its features, advantages, and how it helps in UI/UX design workflows.

Designing user interfaces and wireframes is a crucial step in application development. Whether you’re creating a website, mobile app, or desktop software, having a clear visual structure helps streamline communication between designers, developers, and stakeholders. If you’re looking for a free tool to bring your ideas to life quickly, Pencil Project is an excellent choice.

What is Pencil Project?

Pencil Project is a free and open-source GUI prototyping tool that allows you to create wireframes and mockups for various platforms. It’s cross-platform, meaning it works on Windows, Linux, and macOS. Designed to be user-friendly and lightweight, it is a favorite among beginners and professionals who need a simple yet powerful tool for UI/UX design.

Key Features

1. Built-in Collection of Shapes

Pencil comes with a wide range of built-in UI elements including:

  • Web and desktop UI components
  • Android and iOS UI stencils
  • Flowchart elements and shapes

These shape collections make it easy to create mockups that are platform-specific and visually consistent.

2. Easy Diagramming

With drag-and-drop functionality, creating flowcharts, wireframes, and diagrams is straightforward. The interface is intuitive, and even users with no design background can start prototyping quickly.

3. Multiple Export Options

Pencil allows you to export your designs to different formats such as:

  • PNG images
  • PDF documents
  • Web pages (HTML)
  • OpenOffice documents

This flexibility is useful for presentations, documentation, or sharing designs with clients and developers.

4. Supports Templates and Add-ons

You can extend Pencil’s capabilities by installing templates and shape collections available from the community. Custom templates let you reuse design patterns and maintain consistency across projects.

5. Open Source and Free

One of the biggest advantages of Pencil Project is that it’s completely free and open-source. There are no licensing fees or hidden costs, making it ideal for startups, students, and hobbyists.

Use Cases

  • Wireframing websites and apps
    Quickly sketch layouts before development starts.
  • Designing user flows
    Map out the flow of screens to visualize how users interact with your application.
  • Creating software documentation
    Use diagrams to make your documentation clearer and more engaging.
  • Collaborating with teams
    Share mockups and get feedback early in the design process.

How to Get Started

You can download the latest version of Pencil Project from its official GitHub page:
🔗 https://github.com/evolus/pencil

The installation process is simple, and you can start prototyping within minutes.

Final Thoughts

If you’re in search of a lightweight, free, and powerful GUI prototyping tool, Pencil Project is worth trying. It’s a great tool for creating mockups, wireframes, and UI designs without the complexity or cost of commercial software like Adobe XD or Sketch. Whether you’re a student learning UX design or a developer wanting to prototype an idea quickly, Pencil offers all the essentials.

Compare Two MySQL Databases Using MySQL Workbench – Step-by-Step Guide

Learn how to compare two MySQL databases using MySQL Workbench. Identify schema differences, generate synchronization scripts, and keep your environments in sync.

When working on database-driven applications, it’s common to maintain multiple copies of a MySQL database — such as development, staging, and production. Over time, these environments may drift out of sync, making it essential to compare the database schemas to identify differences.

In this article, you’ll learn how to compare two MySQL databases using MySQL Workbench, and how to synchronize or export the differences between them.

Why Compare Databases?

Database comparison is especially useful for:

  • Identifying schema differences between environments
  • Detecting missing tables, columns, or indexes
  • Preparing migration scripts
  • Ensuring version control for database structures

Tools Required

To perform the comparison, you’ll need:

  • Connection credentials for both databases (source and target)
  • MySQL Workbench (preferably version 6.3 or later)

Steps to Compare Two MySQL Databases

Open MySQL Workbench

Launch the Workbench and make sure both databases (e.g., dev_db and prod_db) are accessible via configured connections.

Go to “Database” → “Compare Schemas”

From the top menu, go to:

Database → Compare Schemas

This opens a new window where you can choose the source and target schemas.

Select Source and Target Schemas

  • Source: Select the original or current version of your database (e.g., dev_db)
  • Target: Select the database you want to compare against (e.g., prod_db)
  • Click “Next” to proceed.

Start Comparison

MySQL Workbench will analyze both databases and show the results in terms of:

  • Tables only present in one database
  • Tables that exist in both but have structural differences
  • Differences in columns, indexes, constraints, routines, views, triggers, etc.

Review the Differences

You’ll be presented with a detailed comparison table showing:

  • Objects to add, modify, or drop
  • SQL scripts representing those changes

This is useful for developers and DBAs to audit what’s changed or to plan a synchronization.

Synchronize or Export Differences (Optional)

You can either:

  • Synchronize directly from source to target using MySQL Workbench
  • Or export the SQL script to apply changes manually after review

Warning: Always back up your databases before applying synchronization scripts to avoid accidental data loss.

Use Case Example

Let’s say you added a new table and modified a few column types in your development database. By using MySQL Workbench’s schema comparison, you can quickly identify those changes and generate a script to apply them to production without having to track each change manually.

Conclusion

MySQL Workbench provides a powerful built-in Schema Comparison Tool that helps you:

  • Identify differences between two MySQL databases
  • Review structural changes in tables, views, routines, and more
  • Generate SQL scripts to synchronize schemas safely

This feature is invaluable for teams managing multiple environments or collaborating on large database projects.

For more information about MySQL Workbench, visit http://www.mysql.com/products/workbench/
MySQL Workbench is freely available at http://www.mysql.com/downloads/workbench/.

How to Detect Unused CSS Selectors and Remove Them from Your Website

Improve website performance by identifying and removing unused CSS selectors. Learn effective tools and methods to clean up your stylesheets.

During the development, we forget to remove selectors, which have been changed during the different phases of the website, Which makes stylesheet file so large. Due to which, stylesheets load slower, which makes the website load slower. So, this is necessary to remove unused css rules from stylesheets to make a website load faster.

There are so many online tools, Firefox Extension as well as commercial products to do that.

Firefox Development Tool: Dust-Me Selectors

It scans your HTML pages and find the unused CSS selectors. It takes all CSS selectors from all stylesheets attached to the page you are viewing and then scan that page to find the unused selectors. It stores data separately for each website you viewed.

Disadvantage: It just gives you the unused selectors, but not providing the updated stylesheet.

Dead Weight: Ruby Gem

It is a CSS coverage tool and only works for rails website. You need to provide a set of stylesheets and URLs, from which it provides a list of selectors which can be “safely” deleted. You can manually remove them from the stylesheet using that list.

You can watch the screen-cast on Dead Weight Introduction at http://railscasts.com/episodes/180-finding-unused-css

Unused-CSS.com: Online Tool

It asks for an online URL to check. From the URL, It scans all CSS files and show the results separately for each stylesheet with graphs. Currently it scans only homepage, but if you need whole website results, you need to provide your e-mail address and it will send the results to you in email.

Helium CSS: Javascript Tool

It is a javascript-based tool and runs from the browser. It is a used for discovering unused selectors across many pages on a web site. It accepts only list of URLs, parses each URL provided and build a list of stylesheets. Using this list of stylesheets and URLs, it generates a list of unused selectors not used in any of the URL provided.

TopStyle 5: Windows Application

It is an HTML Editor, which includes a tool named Style Sweeper. Style sweeper can remove white spaces and blank lines, sort according to Class, Element, ID and also combines multiple selectors. It will also combine repeated property as well as selectors if they are same. But it’s a commercial product costs $80 (USD).

LiquidCity CSS Cleaner: PHP Script

It uses regular expressions to check any HTML page specified by you, generates the report with unused selectors for that HTML page only. From that report, you can manually remove them from the stylesheet.

There are so many other tools available. We will introduce them very soon.